Preliminaries

Set up environment

library(tidyverse)
library(langcog)
library(stats)
library(psych)
library(GPArotation)
library(lme4)
library(RColorBrewer)
# clear environment
rm(list=ls())
graphics.off()

Read in data

# ADULT run 01 (3-point scale)
d_adult01 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/adults/us_run-01_2016-06-05_anonymized.csv") %>% select(-X)
# # ADULT run 02 (7-point scale)
# d_adult02 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/adults/us_run-02_2016-07-19_anonymized.csv") %>% select(-X)
# 
# # ADULT run 03 (3-point scale, original wording for 'free will' and 'intentions')
# d_adult03 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/adults/us_run-03_2016-12-08_anonymized.csv") %>% select(-X)
# CHILD run 01 [lydia, olivia, allie (summer 2016) + nicky, dru, ariel, olivia (fall 2016) + campbell (winter 2017)]
d_child01 <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/children/run-01_2017-01-19_anonymized.csv") %>% select(-X)
# demographic info (for children)
child_demo <- read.csv("/Users/kweisman/Documents/Research (Stanford)/Projects/Dimkid/dimkid/data/children/dimkid_participant_ages_2017-01-19.csv")

Tidy data

# tidy adult run 01
d_adult02 <- d_adult01 %>%
  select(subid, age, gender, ethnicity, duration,
         charName, trialNum, capacity, capWording, 
         hoverTime, rt, response, responseNum) %>%
  rename(character = charName,
         sessionDuration = duration) %>%
  mutate(ageGroup = "adult")
# tidy demographics
child_demo_tidy <- child_demo %>%
  mutate(subid = gsub(" ", "", subid)) %>%
  mutate(subid = gsub("-", "", subid)) %>%
  mutate(subid = toupper(subid)) %>%
  select(subid, age, gender, ethnicity)
# tidy child run 01
d_child02 <- d_child01 %>%
  filter(character %in% c("beetle", "robot"))  %>% # no elephant condition! (n = 1 child)
  select(subid, sessionDuration,
         character, trialNum, capacity, capWording, 
         hoverTime, rt, response, responseNum) %>%
  mutate(ageGroup = "child") %>%
  mutate(subid = gsub(" ", "", subid)) %>%
  mutate(subid = gsub("-", "", subid)) %>%
  mutate(subid = toupper(subid)) %>%
  left_join(child_demo_tidy) %>%
  mutate(subid = factor(as.character(subid)))
Joining, by = "subid"
# combine datasets
d <- d_adult02 %>%
  full_join(d_child02) %>%
  mutate(subid = factor(subid),
         character = factor(character),
         capWording = factor(gsub("\\ ", "_", gsub(" --.*", "", capWording))),
         responseCat = factor(response, levels = c("no", "kinda", "yes")),
         responseNum = ifelse(response == "no", 0,
                              ifelse(response == "kinda", 0.5,
                                     ifelse(response == "yes", 1,
                                            NA))),
         ageGroup = factor(ageGroup, levels = c("adult", "child"))) %>%
  distinct()
Joining, by = c("subid", "age", "gender", "ethnicity", "sessionDuration", "character", "trialNum", "capacity", "capWording", "hoverTime", "rt", "response", "responseNum", "ageGroup")
joining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vectorjoining factors with different levels, coercing to character vector

Demographics

# total n
d %>% 
  select(ageGroup, subid, age) %>%
  distinct(.keep_all = T) %>%
  mutate(ageGroup2 = ifelse(ageGroup == "adult",
                            "adult",
                            ifelse(age < 7 | age > 10, 
                                   "out of age range",
                                   ifelse(is.na(age), 
                                          "missing age",
                                          "child")))) %>%
  count(ageGroup2)
# drop children outside of target age range (7-9y)
d1 <- d %>%
  filter((age >= 7 & age <= 10) | ageGroup == "adult")
d1 %>% 
  select(ageGroup, subid, age) %>%
  distinct(.keep_all = T) %>%
    mutate(ageGroup2 = ifelse(ageGroup == "adult",
                            "adult",
                            ifelse(age < 7 | age > 10, 
                                   "out of age range",
                                   ifelse(is.na(age), 
                                          "missing age",
                                          "child")))) %>%
  count(ageGroup2)
# condition
d1 %>% 
  select(ageGroup, subid, character) %>%
  distinct(.keep_all = T) %>%
  count(ageGroup, character)
# age 
d1 %>% 
  select(ageGroup, subid, age) %>%
  distinct(.keep_all = T) %>%
  group_by(ageGroup) %>%
  summarise(mean_age = mean(age, na.rm = T),
            sd_age = sd(age, na.rm = T),
            median_age = median(age, na.rm = T),
            min_age = min(age, na.rm = T),
            max_age = max(age, na.rm = T))
# plot children's age
qplot(d1 %>% 
        filter(ageGroup == "child") %>%
        distinct(subid, .keep_all = T) %>% 
        select(age), bins = 18) +
  geom_vline(xintercept = median(d1$age[d1$ageGroup == "child"], na.rm = T), color = "red")

# check children's age by condition
d1 %>% 
  filter(ageGroup == "child") %>%
  distinct(subid, .keep_all = T) %>% 
  select(age, character) %>%
  group_by(character) %>% 
  summarise(median = median(age, na.rm = T))
t.test(age ~ character, 
       d1 %>% 
         filter(ageGroup == "child") %>%
         select(subid, age, character) %>% 
         distinct)

    Welch Two Sample t-test

data:  age by character
t = 0.48254, df = 197.76, p-value = 0.63
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.1769700  0.2916335
sample estimates:
mean in group beetle  mean in group robot 
            8.381464             8.324132 
ggplot(d1 %>%
         filter(ageGroup == "child") %>%
         distinct(subid, .keep_all = T) %>% 
         select(age, character) %>%
         group_by(character) %>%
         mutate(median_age = median(age, na.rm = T)),
       aes(x = age)) +
  geom_histogram(bins = 9) +
  facet_wrap(~ character) +
  geom_vline(xintercept = median(d$age[d$ageGroup == "child"], na.rm = T), color = "black") +
  geom_vline(aes(xintercept = median_age, color = character), lty = 2)

# duration
d1 %>%
  group_by(ageGroup) %>%
  summarise(mean = mean(sessionDuration, na.rm = T),
            median = median(sessionDuration, na.rm = T),
            min = min(sessionDuration, na.rm = T),
            max = max(sessionDuration, na.rm = T))
# plot duration by age group and character
ggplot(d1, aes(sessionDuration)) +
  facet_grid(character ~ ageGroup) +
  geom_histogram(breaks = 0:15)

t.test(sessionDuration ~ character,
       d1 %>%
         filter(ageGroup == "child") %>%
         select(subid, character, sessionDuration) %>%
         left_join(d %>% select(subid, sessionDuration)) %>%
         mutate(subid = as.character(subid),
                character = factor(character),
                sessionDuration = round(as.numeric(as.character(sessionDuration)), 3)) %>%
         distinct())
Joining, by = c("subid", "sessionDuration")
Joining, by = c("subid", "sessionDuration")

    Welch Two Sample t-test

data:  sessionDuration by character
t = -0.38762, df = 149.35, p-value = 0.6988
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.5105418  0.3430885
sample estimates:
mean in group beetle  mean in group robot 
            5.293337             5.377063 
t.test(sessionDuration ~ character,
       d1 %>%
         filter(ageGroup == "adult") %>%
         select(subid, character, sessionDuration) %>%
         left_join(d %>% select(subid, sessionDuration)) %>%
         mutate(subid = as.character(subid),
                character = factor(character),
                sessionDuration = round(as.numeric(as.character(sessionDuration)), 3)) %>%
         distinct())
Joining, by = c("subid", "sessionDuration")
Joining, by = c("subid", "sessionDuration")

    Welch Two Sample t-test

data:  sessionDuration by character
t = 0.76334, df = 186.45, p-value = 0.4462
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.2954407  0.6683779
sample estimates:
mean in group beetle  mean in group robot 
            2.963449             2.776980 
# gender
d1 %>%
  select(ageGroup, subid, gender) %>%
  distinct(.keep_all = T) %>%
  count(ageGroup, gender)
# ethnicity
d1 %>% 
  select(ageGroup, subid, ethnicity) %>%
  mutate(ethnicity = tolower(ethnicity)) %>%
  mutate(black = grepl("black", ethnicity) |
           grepl("african american", ethnicity),
         east_asian = grepl("east asian", ethnicity) |
           grepl("eastasian", ethnicity) |
           grepl("chinese", ethnicity) |
           grepl("china", ethnicity) |
           grepl("korea", ethnicity) |
           grepl("japan", ethnicity) |
           grepl("taiwan", ethnicity),
         south_asian = grepl("south asian", ethnicity) |
           grepl("southasian", ethnicity) |
           grepl("india", ethnicity) |
           grepl("pakistan", ethnicity) |
           grepl("bangla", ethnicity) |
           grepl("sri lanka", ethnicity),
         latino = grepl("latin", ethnicity) |
           grepl("hispanic", ethnicity) |
           grepl("mexic", ethnicity),
         middle_eastern = grepl("middle", ethnicity),
         pac_island = grepl("pacific", ethnicity) |
           grepl("hawaii", ethnicity),
         native_am = grepl("nativeamerican", ethnicity) |
           grepl("native american", ethnicity) |
           grepl("american indian", ethnicity) |
           grepl("alaska native", ethnicity),
         white = grepl("white", ethnicity),
         other = grepl("other", ethnicity)) %>%
  distinct(.keep_all = T) %>%
  gather(ethnicityTF, TF, -subid, -ethnicity, -ageGroup) %>%
  filter(TF) %>%
  count(ageGroup, ethnicityTF)
# NOTE: not mutually exclusive!!
# mutually exclusive version
d1 %>% 
  select(ageGroup, subid, ethnicity) %>%
  mutate(ethnicity = tolower(ethnicity)) %>%
  distinct(.keep_all = T) %>%
  mutate(ethnicity2 = ifelse(ageGroup == "adult",
                             ifelse(grepl(",", ethnicity), "multiple", ethnicity),
                             ifelse(grepl(";", ethnicity), "multiple", ethnicity))) %>% 
  mutate(ethnicity3 = ifelse(grepl("other", ethnicity2),
                             ifelse(grepl("/", ethnicity2) | grepl("mix", ethnicity2),
                                    "multiple",
                                    ifelse(grepl("asian", ethnicity2) | grepl("korean", ethnicity2),
                                           "east asian",
                                           ethnicity2)),
                             ethnicity2)) %>%
  count(ageGroup, ethnicity3) %>%
  ungroup() %>%
  group_by(ageGroup) %>%
  mutate(prop = n/sum(n)) %>%
  arrange(ageGroup, desc(n))
# experimineter error
d_child01 %>% # use d_child01 (before dropping n = 1 child in "elephant" condition)
  filter(!(character %in% c("beetle", "robot"))) %>%
  select(subid) %>%
  distinct() %>%
  count() %>%
  mutate(percent = n/200)
# incomplete trials ("skip", "bail")
d1 %>% # use d1 (before dropping trials with rt > 250ms) 
  count(ageGroup, subid) %>%
  filter(n != 40) %>%
  mutate(n_missing = 40-n) %>%
  group_by(ageGroup) %>%
  summarise(sum_missing = sum(n_missing)) %>%
  mutate(percent = sum_missing/8000)
# trials with rt > 250ms
d1 %>%
  filter(rt < 250) %>%
  count(ageGroup) %>%
  mutate(percent = n/8000)
# all missing trials
d1 %>% # use d1 (before dropping trials) 
  count(ageGroup, subid) %>%
  filter(n != 40) %>%
  mutate(n_NA = 40-n) %>%
  group_by(ageGroup) %>%
  summarise(n_NA = sum(n_NA)) %>%
  mutate(percent_NA = n_NA/8000) %>%
  full_join(d1 %>%
              filter(rt < 250) %>%
              count(ageGroup) %>%
              rename(n_fast = n) %>%
              mutate(percent_fast = n_fast/8000)) %>%
  mutate(n_missing_TOTAL = n_NA + n_fast,
         percent_missing_TOTAL = percent_NA + percent_fast)
Joining, by = "ageGroup"
NA

Data preparation

Filter RTs

# examine and filter by RTs
ggplot(d1) +
  geom_histogram(aes(x = rt), bins = 100) +
  facet_wrap(~ageGroup) +
  scale_x_log10(breaks = seq(0, 1000, 100)) +
  geom_vline(xintercept = 250, color = "red")

d2 <- d1 %>%
  filter(!(rt < 250) | is.na(rt)) # preset criterion of 250ms

Look at hover time

d2 %>%
  filter(!(capacity %in% c("personality", "beliefs", "pleasure", "desires", "self_restraint", "goals", "nauseated"))) %>%
  mutate(noHover = hoverTime == 0) %>%
  count(ageGroup, noHover) %>%
  group_by(ageGroup) %>%
  mutate(percent = n/sum(n))
ggplot(d2, aes(x = hoverTime)) +
  facet_grid(~ ageGroup) +
  geom_histogram()

Prepare data for EFA

# finish tidying
d3 <- d2 %>%
  select(capacity, responseNum, subid) %>%
  spread(capacity, responseNum)
# make combined dataset
d3_combined <- data.frame(d3[,-1], row.names = d3[,1])
# make separate child and adult datasets
d3_adult <- d3 %>%
  left_join(d %>% select(subid, ageGroup)) %>%
  filter(ageGroup == "adult") %>%
  select(-ageGroup) %>%
  distinct()
Joining, by = "subid"
d3_adult <- data.frame(d3_adult[,-1], row.names = d3_adult[,1])
d3_child <- d3 %>%
  left_join(d %>% select(subid, ageGroup)) %>%
  filter(ageGroup == "child") %>%
  select(-ageGroup) %>%
  distinct()
Joining, by = "subid"
d3_child <- data.frame(d3_child[,-1], row.names = d3_child[,1])

General analysis settings

# set correlation type: pearson or polychoric?
cor_type <- "cor"
# cor_type <- "poly"
# set rotation type: varimax or oblimin?
# rot_type <- "varimax"
rot_type <- "oblimin"
# set score type
# score_type <- "regression"
score_type <- "Thurstone"
# score_type <- "tenBerge"
# score_type <- "Anderson"
# score_type <- "Bartlett"
# score_type <- "Harman"

Adults alone

Exploratory factor analysis

Maximal (13-factor) unrotated solution

# do factor analysis
efa_adult_max_unrot <- fa(d3_adult, nfactors = 13, rotate = "none", cor = cor_type)
efa_adult_max_unrot
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8  MR11   MR9  MR10  MR12  MR13   h2
angry           0.66  0.09  0.03  0.00 -0.02 -0.23 -0.08 -0.13  0.05  0.01  0.04 -0.02  0.21 0.57
beliefs         0.39  0.45  0.16 -0.06  0.23 -0.06  0.44  0.10  0.03  0.13 -0.14 -0.01 -0.01 0.68
calm            0.69 -0.07  0.13 -0.08  0.08 -0.04 -0.04  0.10  0.08  0.10  0.08  0.12  0.05 0.56
choices         0.24  0.22  0.48  0.12  0.25  0.03 -0.20 -0.09 -0.14 -0.19 -0.12 -0.18  0.14 0.59
communicating  -0.02  0.51  0.45  0.11 -0.27 -0.14 -0.19  0.16 -0.01  0.10 -0.08  0.08 -0.11 0.67
computations   -0.48  0.74  0.20  0.00 -0.14  0.01  0.05  0.02  0.05 -0.05 -0.03  0.00  0.08 0.84
conscious       0.34  0.00  0.42  0.22  0.20  0.07 -0.01 -0.14  0.00 -0.14 -0.15  0.07  0.04 0.45
depressed       0.74  0.27 -0.08 -0.34 -0.01  0.06 -0.09 -0.16  0.14 -0.04  0.02  0.00 -0.05 0.81
depth           0.14  0.14  0.46  0.31 -0.06  0.29  0.02 -0.20 -0.05 -0.01 -0.07  0.01  0.05 0.48
desires         0.64 -0.09  0.14  0.03  0.11  0.07  0.00  0.03 -0.24  0.27  0.11 -0.16 -0.02 0.63
disrespected    0.65  0.31 -0.18 -0.07 -0.01  0.11 -0.07 -0.13  0.03  0.04 -0.04  0.02 -0.06 0.60
embarrassed     0.56  0.44 -0.38  0.32 -0.01 -0.04 -0.02  0.18  0.02 -0.14  0.18  0.05  0.01 0.84
emo_recog       0.27  0.41  0.18 -0.11  0.17  0.04  0.28  0.03 -0.03 -0.17 -0.06  0.16 -0.16 0.49
fear            0.79 -0.35  0.20 -0.06 -0.24 -0.22  0.12 -0.06 -0.03 -0.08  0.02 -0.02  0.00 0.91
free_will       0.19  0.17  0.40  0.16  0.36 -0.19 -0.19 -0.12 -0.14 -0.08  0.07 -0.03  0.09 0.51
goal            0.32  0.16  0.32  0.11  0.13 -0.08  0.18  0.02 -0.10  0.01  0.09 -0.15  0.05 0.35
guilt           0.67  0.48 -0.38  0.31 -0.03 -0.04  0.00 -0.07 -0.02  0.03 -0.09 -0.02 -0.02 0.93
happy           0.76  0.20 -0.02 -0.38  0.04 -0.03 -0.15 -0.08  0.05  0.04 -0.08  0.05 -0.01 0.81
hungry          0.65 -0.64 -0.01  0.15  0.09  0.08 -0.02  0.07  0.00  0.04  0.02  0.01 -0.02 0.89
intentions      0.05  0.54  0.33  0.00  0.13 -0.20  0.06  0.05  0.08  0.05  0.30 -0.13 -0.05 0.59
joy             0.77  0.26 -0.10 -0.33 -0.06  0.14 -0.04  0.09 -0.10  0.02  0.05  0.10  0.05 0.84
love            0.73  0.31 -0.02 -0.19  0.07  0.22  0.04 -0.01 -0.07  0.03  0.01 -0.12 -0.07 0.74
morality        0.20  0.50  0.20 -0.10  0.04  0.03  0.22  0.10  0.09 -0.02  0.05 -0.15  0.01 0.43
nauseated       0.67 -0.26  0.16 -0.03 -0.06  0.13 -0.09  0.11 -0.14  0.07  0.02 -0.02  0.05 0.61
odors           0.50 -0.37  0.20  0.26  0.10  0.19  0.00  0.08  0.03 -0.09  0.06  0.22  0.02 0.61
pain            0.71 -0.45  0.09  0.12 -0.06 -0.08 -0.09  0.13  0.15  0.10 -0.10 -0.02  0.03 0.81
personality     0.35  0.42  0.12 -0.14  0.20  0.03  0.19  0.17 -0.11  0.03 -0.12  0.15  0.11 0.50
pleasure        0.72 -0.10  0.04 -0.12 -0.13  0.23  0.01  0.20  0.01 -0.27 -0.09 -0.13 -0.06 0.76
pride           0.66  0.41 -0.12 -0.19  0.01 -0.02  0.05 -0.08  0.00  0.06  0.19  0.01  0.12 0.72
reasoning       0.21  0.30  0.49  0.12  0.11 -0.15 -0.16 -0.08 -0.20 -0.11  0.01  0.22 -0.06 0.56
recognizing    -0.07  0.65  0.47  0.03 -0.19 -0.04 -0.09  0.18 -0.01  0.12 -0.07  0.04  0.03 0.75
remembering    -0.01  0.54  0.44  0.04 -0.08  0.05 -0.14  0.05 -0.04 -0.01  0.04 -0.14 -0.24 0.60
safe            0.72 -0.27  0.24  0.03  0.10 -0.11  0.12 -0.09 -0.05  0.00 -0.04  0.08 -0.10 0.72
seeing          0.24  0.03  0.45  0.33 -0.08  0.27 -0.02 -0.15  0.14 -0.02  0.06 -0.01  0.00 0.50
self_aware      0.36  0.11  0.33  0.09  0.31 -0.14 -0.05 -0.01  0.17  0.10  0.05  0.07 -0.22 0.47
self_restraint  0.33  0.36  0.20 -0.07  0.23  0.02  0.09  0.07  0.15 -0.06 -0.09  0.03  0.17 0.42
sounds          0.18  0.09  0.45  0.21 -0.28  0.22  0.06 -0.17 -0.02  0.06  0.18  0.06  0.00 0.48
temperature     0.21  0.06  0.44  0.28 -0.14  0.35  0.17 -0.18  0.17  0.10  0.11  0.04  0.03 0.58
thoughts        0.45  0.15  0.31 -0.06  0.36 -0.11 -0.14  0.13  0.21 -0.10  0.04 -0.09  0.00 0.57
tired           0.71 -0.29  0.20  0.11 -0.07  0.04 -0.03  0.07  0.06  0.07 -0.07 -0.08  0.12 0.69
                  u2 com
angry          0.427 1.7
beliefs        0.323 4.4
calm           0.445 1.4
choices        0.413 5.1
communicating  0.333 3.8
computations   0.155 2.1
conscious      0.545 4.1
depressed      0.191 2.0
depth          0.515 3.7
desires        0.370 2.2
disrespected   0.403 1.9
embarrassed    0.160 4.2
emo_recog      0.513 5.3
fear           0.087 2.1
free_will      0.492 5.4
goal           0.654 4.9
guilt          0.070 3.1
happy          0.189 1.8
hungry         0.112 2.2
intentions     0.415 3.2
joy            0.162 1.9
love           0.262 1.9
morality       0.570 2.8
nauseated      0.391 1.8
odors          0.391 4.0
pain           0.192 2.2
personality    0.501 4.9
pleasure       0.242 2.0
pride          0.282 2.3
reasoning      0.438 4.3
recognizing    0.251 2.5
remembering    0.396 2.8
safe           0.283 1.8
seeing         0.498 3.9
self_aware     0.529 5.2
self_restraint 0.582 4.9
sounds         0.519 4.4
temperature    0.423 5.2
thoughts       0.433 4.6
tired          0.313 1.8

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9 MR10 MR12 MR13
SS loadings           10.58 5.08 3.45 1.31 1.07 0.82 0.73 0.53 0.43 0.41 0.40 0.39 0.34
Proportion Var         0.26 0.13 0.09 0.03 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.26 0.39 0.48 0.51 0.54 0.56 0.58 0.59 0.60 0.61 0.62 0.63 0.64
Proportion Explained   0.41 0.20 0.13 0.05 0.04 0.03 0.03 0.02 0.02 0.02 0.02 0.02 0.01
Cumulative Proportion  0.41 0.61 0.75 0.80 0.84 0.87 0.90 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  3.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9
Correlation of scores with factors             0.99 0.98 0.96 0.93 0.87 0.85 0.82 0.80 0.73 0.76
Multiple R square of scores with factors       0.98 0.96 0.92 0.86 0.76 0.72 0.67 0.64 0.54 0.57
Minimum correlation of possible factor scores  0.96 0.92 0.83 0.72 0.52 0.44 0.34 0.27 0.08 0.15
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.68
Multiple R square of scores with factors       0.56 0.50  0.47
Minimum correlation of possible factor scores  0.12 0.01 -0.07
# examine eigenvalues and variance explained
efa_adult_max_unrot_eigenvalues <- print(efa_adult_max_unrot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8  MR11   MR9  MR10  MR12  MR13   h2
angry           0.66  0.09  0.03  0.00 -0.02 -0.23 -0.08 -0.13  0.05  0.01  0.04 -0.02  0.21 0.57
beliefs         0.39  0.45  0.16 -0.06  0.23 -0.06  0.44  0.10  0.03  0.13 -0.14 -0.01 -0.01 0.68
calm            0.69 -0.07  0.13 -0.08  0.08 -0.04 -0.04  0.10  0.08  0.10  0.08  0.12  0.05 0.56
choices         0.24  0.22  0.48  0.12  0.25  0.03 -0.20 -0.09 -0.14 -0.19 -0.12 -0.18  0.14 0.59
communicating  -0.02  0.51  0.45  0.11 -0.27 -0.14 -0.19  0.16 -0.01  0.10 -0.08  0.08 -0.11 0.67
computations   -0.48  0.74  0.20  0.00 -0.14  0.01  0.05  0.02  0.05 -0.05 -0.03  0.00  0.08 0.84
conscious       0.34  0.00  0.42  0.22  0.20  0.07 -0.01 -0.14  0.00 -0.14 -0.15  0.07  0.04 0.45
depressed       0.74  0.27 -0.08 -0.34 -0.01  0.06 -0.09 -0.16  0.14 -0.04  0.02  0.00 -0.05 0.81
depth           0.14  0.14  0.46  0.31 -0.06  0.29  0.02 -0.20 -0.05 -0.01 -0.07  0.01  0.05 0.48
desires         0.64 -0.09  0.14  0.03  0.11  0.07  0.00  0.03 -0.24  0.27  0.11 -0.16 -0.02 0.63
disrespected    0.65  0.31 -0.18 -0.07 -0.01  0.11 -0.07 -0.13  0.03  0.04 -0.04  0.02 -0.06 0.60
embarrassed     0.56  0.44 -0.38  0.32 -0.01 -0.04 -0.02  0.18  0.02 -0.14  0.18  0.05  0.01 0.84
emo_recog       0.27  0.41  0.18 -0.11  0.17  0.04  0.28  0.03 -0.03 -0.17 -0.06  0.16 -0.16 0.49
fear            0.79 -0.35  0.20 -0.06 -0.24 -0.22  0.12 -0.06 -0.03 -0.08  0.02 -0.02  0.00 0.91
free_will       0.19  0.17  0.40  0.16  0.36 -0.19 -0.19 -0.12 -0.14 -0.08  0.07 -0.03  0.09 0.51
goal            0.32  0.16  0.32  0.11  0.13 -0.08  0.18  0.02 -0.10  0.01  0.09 -0.15  0.05 0.35
guilt           0.67  0.48 -0.38  0.31 -0.03 -0.04  0.00 -0.07 -0.02  0.03 -0.09 -0.02 -0.02 0.93
happy           0.76  0.20 -0.02 -0.38  0.04 -0.03 -0.15 -0.08  0.05  0.04 -0.08  0.05 -0.01 0.81
hungry          0.65 -0.64 -0.01  0.15  0.09  0.08 -0.02  0.07  0.00  0.04  0.02  0.01 -0.02 0.89
intentions      0.05  0.54  0.33  0.00  0.13 -0.20  0.06  0.05  0.08  0.05  0.30 -0.13 -0.05 0.59
joy             0.77  0.26 -0.10 -0.33 -0.06  0.14 -0.04  0.09 -0.10  0.02  0.05  0.10  0.05 0.84
love            0.73  0.31 -0.02 -0.19  0.07  0.22  0.04 -0.01 -0.07  0.03  0.01 -0.12 -0.07 0.74
morality        0.20  0.50  0.20 -0.10  0.04  0.03  0.22  0.10  0.09 -0.02  0.05 -0.15  0.01 0.43
nauseated       0.67 -0.26  0.16 -0.03 -0.06  0.13 -0.09  0.11 -0.14  0.07  0.02 -0.02  0.05 0.61
odors           0.50 -0.37  0.20  0.26  0.10  0.19  0.00  0.08  0.03 -0.09  0.06  0.22  0.02 0.61
pain            0.71 -0.45  0.09  0.12 -0.06 -0.08 -0.09  0.13  0.15  0.10 -0.10 -0.02  0.03 0.81
personality     0.35  0.42  0.12 -0.14  0.20  0.03  0.19  0.17 -0.11  0.03 -0.12  0.15  0.11 0.50
pleasure        0.72 -0.10  0.04 -0.12 -0.13  0.23  0.01  0.20  0.01 -0.27 -0.09 -0.13 -0.06 0.76
pride           0.66  0.41 -0.12 -0.19  0.01 -0.02  0.05 -0.08  0.00  0.06  0.19  0.01  0.12 0.72
reasoning       0.21  0.30  0.49  0.12  0.11 -0.15 -0.16 -0.08 -0.20 -0.11  0.01  0.22 -0.06 0.56
recognizing    -0.07  0.65  0.47  0.03 -0.19 -0.04 -0.09  0.18 -0.01  0.12 -0.07  0.04  0.03 0.75
remembering    -0.01  0.54  0.44  0.04 -0.08  0.05 -0.14  0.05 -0.04 -0.01  0.04 -0.14 -0.24 0.60
safe            0.72 -0.27  0.24  0.03  0.10 -0.11  0.12 -0.09 -0.05  0.00 -0.04  0.08 -0.10 0.72
seeing          0.24  0.03  0.45  0.33 -0.08  0.27 -0.02 -0.15  0.14 -0.02  0.06 -0.01  0.00 0.50
self_aware      0.36  0.11  0.33  0.09  0.31 -0.14 -0.05 -0.01  0.17  0.10  0.05  0.07 -0.22 0.47
self_restraint  0.33  0.36  0.20 -0.07  0.23  0.02  0.09  0.07  0.15 -0.06 -0.09  0.03  0.17 0.42
sounds          0.18  0.09  0.45  0.21 -0.28  0.22  0.06 -0.17 -0.02  0.06  0.18  0.06  0.00 0.48
temperature     0.21  0.06  0.44  0.28 -0.14  0.35  0.17 -0.18  0.17  0.10  0.11  0.04  0.03 0.58
thoughts        0.45  0.15  0.31 -0.06  0.36 -0.11 -0.14  0.13  0.21 -0.10  0.04 -0.09  0.00 0.57
tired           0.71 -0.29  0.20  0.11 -0.07  0.04 -0.03  0.07  0.06  0.07 -0.07 -0.08  0.12 0.69
                  u2 com
angry          0.427 1.7
beliefs        0.323 4.4
calm           0.445 1.4
choices        0.413 5.1
communicating  0.333 3.8
computations   0.155 2.1
conscious      0.545 4.1
depressed      0.191 2.0
depth          0.515 3.7
desires        0.370 2.2
disrespected   0.403 1.9
embarrassed    0.160 4.2
emo_recog      0.513 5.3
fear           0.087 2.1
free_will      0.492 5.4
goal           0.654 4.9
guilt          0.070 3.1
happy          0.189 1.8
hungry         0.112 2.2
intentions     0.415 3.2
joy            0.162 1.9
love           0.262 1.9
morality       0.570 2.8
nauseated      0.391 1.8
odors          0.391 4.0
pain           0.192 2.2
personality    0.501 4.9
pleasure       0.242 2.0
pride          0.282 2.3
reasoning      0.438 4.3
recognizing    0.251 2.5
remembering    0.396 2.8
safe           0.283 1.8
seeing         0.498 3.9
self_aware     0.529 5.2
self_restraint 0.582 4.9
sounds         0.519 4.4
temperature    0.423 5.2
thoughts       0.433 4.6
tired          0.313 1.8

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9 MR10 MR12 MR13
SS loadings           10.58 5.08 3.45 1.31 1.07 0.82 0.73 0.53 0.43 0.41 0.40 0.39 0.34
Proportion Var         0.26 0.13 0.09 0.03 0.03 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.26 0.39 0.48 0.51 0.54 0.56 0.58 0.59 0.60 0.61 0.62 0.63 0.64
Proportion Explained   0.41 0.20 0.13 0.05 0.04 0.03 0.03 0.02 0.02 0.02 0.02 0.02 0.01
Cumulative Proportion  0.41 0.61 0.75 0.80 0.84 0.87 0.90 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  3.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8 MR11  MR9
Correlation of scores with factors             0.99 0.98 0.96 0.93 0.87 0.85 0.82 0.80 0.73 0.76
Multiple R square of scores with factors       0.98 0.96 0.92 0.86 0.76 0.72 0.67 0.64 0.54 0.57
Minimum correlation of possible factor scores  0.96 0.92 0.83 0.72 0.52 0.44 0.34 0.27 0.08 0.15
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.68
Multiple R square of scores with factors       0.56 0.50  0.47
Minimum correlation of possible factor scores  0.12 0.01 -0.07
# count factors with eigenvalues > 1 and variance explained > 5%
efa_adult_max_unrot_nfactors <- efa_adult_max_unrot_eigenvalues %>%
  filter(SS.loadings > 1, Proportion.Explained > 0.05) %>%
  count() %>%
  as.numeric()
efa_adult_max_unrot_nfactors
[1] 4
# manually check that each factor is the dominant factor for at least one mental capacity item
efa_adult_max_unrot_loadings <- fa.sort(loadings(efa_adult_max_unrot)[]) %>%
  data.frame() %>%
  select(1:efa_adult_max_unrot_nfactors) %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3, F4 = MR4) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         F4_abs = abs(F4),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs, F4_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        ifelse(loading_abs == abs(F4), F4,
                                               NA)))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       ifelse(loading == F4, "F4",
                                              NA)))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           ifelse(loading == F4, "Factor 4",
                                                  NA)))))
efa_adult_max_unrot_loadings %>% count(factorName) # drop any factors where n < 1
# reset as needed
efa_adult_max_unrot_nfactors <- efa_adult_max_unrot_loadings %>% count(factorName) %>% nrow()

Maximal (13-factor) rotated solution

# do factor analysis
efa_adult_max_rot <- fa(d3_adult, nfactors = 13, rotate = rot_type, cor = cor_type)
efa_adult_max_rot
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR7   MR5   MR6   MR9  MR13  MR10  MR12  MR11   MR8   h2
angry           0.30 -0.02  0.01  0.22 -0.04  0.21  0.36 -0.02 -0.06  0.08 -0.15  0.21  0.02 0.57
beliefs        -0.03  0.04  0.01  0.07  0.77 -0.04  0.07  0.07  0.06  0.06 -0.02  0.03 -0.07 0.68
calm            0.29  0.03  0.06  0.02  0.08 -0.03  0.13  0.15  0.15  0.06 -0.01  0.17  0.25 0.56
choices         0.00  0.05  0.06 -0.03  0.00  0.73 -0.03  0.05 -0.05  0.00  0.13  0.03 -0.07 0.59
communicating  -0.04  0.84  0.02  0.06 -0.04 -0.01  0.08 -0.02  0.07 -0.02 -0.02  0.00  0.01 0.67
computations   -0.03  0.40  0.10  0.03  0.16  0.05 -0.19 -0.30 -0.23  0.13 -0.05 -0.08 -0.11 0.84
conscious      -0.03 -0.06  0.26  0.00  0.15  0.41  0.09 -0.08  0.14 -0.16  0.04  0.01  0.06 0.45
depressed       0.81 -0.06  0.06  0.06 -0.01  0.00  0.08 -0.06  0.08  0.06  0.08  0.00 -0.05 0.81
depth          -0.06  0.07  0.55  0.01  0.03  0.25 -0.05  0.03 -0.06 -0.15  0.01 -0.05 -0.04 0.48
desires         0.06 -0.03  0.05  0.04  0.07  0.09  0.04  0.66  0.03  0.05 -0.01  0.04  0.00 0.63
disrespected    0.54 -0.01  0.09  0.31  0.02 -0.02 -0.05  0.07  0.06 -0.10  0.02 -0.01 -0.07 0.60
embarrassed    -0.06  0.01 -0.03  0.91 -0.03 -0.03 -0.03 -0.03 -0.01  0.13  0.09 -0.02  0.13 0.84
emo_recog       0.11  0.01  0.04  0.04  0.49  0.03  0.07 -0.15  0.11  0.01  0.13 -0.30  0.08 0.49
fear            0.07 -0.01  0.03 -0.01  0.02 -0.02  0.83  0.05 -0.01  0.01  0.11  0.04  0.02 0.91
free_will      -0.03  0.00 -0.03  0.04 -0.03  0.62  0.02  0.09  0.11  0.13 -0.16 -0.04  0.08 0.51
goal           -0.20 -0.01  0.09  0.06  0.26  0.22  0.22  0.18 -0.03  0.22  0.02 -0.02 -0.05 0.35
guilt           0.12  0.03  0.01  0.85  0.10  0.03  0.02  0.05  0.01 -0.15 -0.06  0.03 -0.15 0.93
happy           0.78  0.07 -0.10 -0.04  0.06  0.06  0.10  0.06  0.08 -0.06  0.03  0.07  0.03 0.81
hungry         -0.07 -0.28  0.09  0.06 -0.07 -0.02  0.20  0.29  0.21 -0.13  0.15  0.18  0.17 0.89
intentions      0.00  0.20  0.04  0.06  0.12  0.09  0.02  0.04  0.11  0.52 -0.10 -0.07 -0.04 0.59
joy             0.62  0.07 -0.04  0.09  0.09 -0.06  0.03  0.19 -0.15  0.00  0.15 -0.03  0.20 0.84
love            0.47 -0.05  0.07  0.14  0.18  0.04 -0.07  0.27 -0.01  0.03  0.21 -0.07 -0.07 0.74
morality        0.06  0.12  0.09  0.04  0.35  0.01  0.01 -0.03 -0.05  0.28  0.14  0.01 -0.11 0.43
nauseated       0.13  0.04  0.07 -0.04 -0.05  0.06  0.16  0.37 -0.04 -0.07  0.19  0.11  0.17 0.61
odors          -0.10 -0.16  0.31  0.11 -0.02  0.05  0.05  0.07  0.18 -0.12  0.14  0.06  0.37 0.61
pain            0.00  0.06  0.03  0.08 -0.05 -0.06  0.31  0.16  0.21 -0.13  0.12  0.40  0.10 0.81
personality     0.13  0.11 -0.08  0.04  0.54  0.10 -0.09  0.07 -0.10 -0.05  0.01 -0.01  0.20 0.50
pleasure        0.15 -0.01  0.01  0.10  0.03  0.04  0.23  0.03 -0.04 -0.04  0.60  0.04  0.03 0.76
pride           0.53 -0.07  0.07  0.24  0.11  0.00  0.08  0.09 -0.13  0.21 -0.10  0.00  0.06 0.72
reasoning       0.04  0.31  0.04  0.03  0.01  0.39  0.15 -0.01  0.12 -0.05 -0.12 -0.26  0.20 0.56
recognizing     0.01  0.76  0.07 -0.02  0.13  0.03 -0.08 -0.01 -0.08  0.05 -0.01  0.06  0.03 0.75
remembering     0.05  0.52  0.10  0.00 -0.05  0.12 -0.10  0.09  0.12  0.16  0.16 -0.19 -0.17 0.60
safe            0.07 -0.11  0.08 -0.02  0.18  0.08  0.45  0.15  0.24 -0.10  0.01 -0.03  0.08 0.72
seeing         -0.02  0.04  0.62  0.04 -0.10  0.12 -0.01 -0.03  0.09  0.01  0.07  0.05 -0.01 0.50
self_aware      0.12  0.10  0.08  0.00  0.13  0.07 -0.02  0.06  0.52  0.11 -0.09  0.02  0.04 0.47
self_restraint  0.19  0.01  0.07  0.03  0.37  0.21 -0.10 -0.16  0.00  0.08  0.05  0.18  0.09 0.42
sounds          0.03  0.15  0.61 -0.05 -0.10 -0.04  0.15  0.07 -0.09  0.06 -0.05 -0.11  0.04 0.48
temperature     0.02 -0.01  0.78 -0.05  0.07 -0.09 -0.02  0.00  0.02  0.04 -0.02  0.04  0.00 0.58
thoughts        0.18  0.03 -0.07 -0.02  0.10  0.31 -0.05 -0.04  0.31  0.25  0.15  0.21  0.08 0.57
tired           0.02  0.03  0.16  0.05  0.01  0.06  0.28  0.20  0.04 -0.07  0.15  0.33  0.06 0.69
                  u2 com
angry          0.427 4.8
beliefs        0.323 1.1
calm           0.445 4.9
choices        0.413 1.1
communicating  0.333 1.1
computations   0.155 4.4
conscious      0.545 3.1
depressed      0.191 1.1
depth          0.515 1.7
desires        0.370 1.1
disrespected   0.403 1.9
embarrassed    0.160 1.1
emo_recog      0.513 2.5
fear           0.087 1.1
free_will      0.492 1.4
goal           0.654 6.3
guilt          0.070 1.2
happy          0.189 1.2
hungry         0.112 6.9
intentions     0.415 1.8
joy            0.162 1.9
love           0.262 3.0
morality       0.570 3.1
nauseated      0.391 3.5
odors          0.391 4.3
pain           0.192 3.9
personality    0.501 1.9
pleasure       0.242 1.6
pride          0.282 2.4
reasoning      0.438 4.3
recognizing    0.251 1.2
remembering    0.396 2.6
safe           0.283 2.9
seeing         0.498 1.2
self_aware     0.529 1.7
self_restraint 0.582 4.0
sounds         0.519 1.5
temperature    0.423 1.1
thoughts       0.433 5.6
tired          0.313 4.1

                       MR1  MR2  MR3  MR4  MR7  MR5  MR6  MR9 MR13 MR10 MR12 MR11  MR8
SS loadings           3.84 2.55 2.36 2.39 2.28 2.15 2.51 1.93 1.18 1.10 1.20 1.12 0.93
Proportion Var        0.10 0.06 0.06 0.06 0.06 0.05 0.06 0.05 0.03 0.03 0.03 0.03 0.02
Cumulative Var        0.10 0.16 0.22 0.28 0.34 0.39 0.45 0.50 0.53 0.56 0.59 0.62 0.64
Proportion Explained  0.15 0.10 0.09 0.09 0.09 0.08 0.10 0.08 0.05 0.04 0.05 0.04 0.04
Cumulative Proportion 0.15 0.25 0.34 0.44 0.53 0.61 0.71 0.78 0.83 0.87 0.92 0.96 1.00

 With factor correlations of 
      MR1   MR2  MR3  MR4   MR7  MR5   MR6   MR9  MR13  MR10  MR12  MR11   MR8
MR1  1.00  0.07 0.05 0.53  0.43 0.18  0.38  0.37  0.08  0.12  0.33  0.15  0.14
MR2  0.07  1.00 0.27 0.07  0.28 0.34 -0.17 -0.16 -0.09  0.36 -0.10 -0.28 -0.13
MR3  0.05  0.27 1.00 0.11  0.17 0.34  0.25  0.23  0.18  0.01  0.19  0.03  0.09
MR4  0.53  0.07 0.11 1.00  0.34 0.12  0.22  0.27  0.05  0.11  0.18  0.11  0.11
MR7  0.43  0.28 0.17 0.34  1.00 0.30  0.07  0.13  0.08  0.28  0.13 -0.06  0.04
MR5  0.18  0.34 0.34 0.12  0.30 1.00  0.15  0.15  0.31  0.18  0.07  0.00  0.14
MR6  0.38 -0.17 0.25 0.22  0.07 0.15  1.00  0.53  0.34 -0.16  0.31  0.38  0.36
MR9  0.37 -0.16 0.23 0.27  0.13 0.15  0.53  1.00  0.25 -0.11  0.32  0.30  0.28
MR13 0.08 -0.09 0.18 0.05  0.08 0.31  0.34  0.25  1.00 -0.03  0.13  0.21  0.24
MR10 0.12  0.36 0.01 0.11  0.28 0.18 -0.16 -0.11 -0.03  1.00 -0.09 -0.15 -0.09
MR12 0.33 -0.10 0.19 0.18  0.13 0.07  0.31  0.32  0.13 -0.09  1.00  0.20  0.22
MR11 0.15 -0.28 0.03 0.11 -0.06 0.00  0.38  0.30  0.21 -0.15  0.20  1.00  0.20
MR8  0.14 -0.13 0.09 0.11  0.04 0.14  0.36  0.28  0.24 -0.09  0.22  0.20  1.00

Mean item complexity =  2.6
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR7  MR5  MR6  MR9 MR13 MR10
Correlation of scores with factors             0.96 0.94 0.91 0.97 0.90 0.89 0.95 0.89 0.84 0.84
Multiple R square of scores with factors       0.93 0.88 0.82 0.94 0.82 0.80 0.91 0.79 0.71 0.70
Minimum correlation of possible factor scores  0.85 0.76 0.65 0.88 0.63 0.60 0.82 0.57 0.42 0.40
                                               MR12 MR11  MR8
Correlation of scores with factors             0.86 0.83 0.81
Multiple R square of scores with factors       0.73 0.68 0.66
Minimum correlation of possible factor scores  0.47 0.37 0.31
# examine eigenvalues and variance explained
efa_adult_max_rot_eigenvalues <- print(efa_adult_max_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR7   MR5   MR6   MR9  MR13  MR10  MR12  MR11   MR8   h2
angry           0.30 -0.02  0.01  0.22 -0.04  0.21  0.36 -0.02 -0.06  0.08 -0.15  0.21  0.02 0.57
beliefs        -0.03  0.04  0.01  0.07  0.77 -0.04  0.07  0.07  0.06  0.06 -0.02  0.03 -0.07 0.68
calm            0.29  0.03  0.06  0.02  0.08 -0.03  0.13  0.15  0.15  0.06 -0.01  0.17  0.25 0.56
choices         0.00  0.05  0.06 -0.03  0.00  0.73 -0.03  0.05 -0.05  0.00  0.13  0.03 -0.07 0.59
communicating  -0.04  0.84  0.02  0.06 -0.04 -0.01  0.08 -0.02  0.07 -0.02 -0.02  0.00  0.01 0.67
computations   -0.03  0.40  0.10  0.03  0.16  0.05 -0.19 -0.30 -0.23  0.13 -0.05 -0.08 -0.11 0.84
conscious      -0.03 -0.06  0.26  0.00  0.15  0.41  0.09 -0.08  0.14 -0.16  0.04  0.01  0.06 0.45
depressed       0.81 -0.06  0.06  0.06 -0.01  0.00  0.08 -0.06  0.08  0.06  0.08  0.00 -0.05 0.81
depth          -0.06  0.07  0.55  0.01  0.03  0.25 -0.05  0.03 -0.06 -0.15  0.01 -0.05 -0.04 0.48
desires         0.06 -0.03  0.05  0.04  0.07  0.09  0.04  0.66  0.03  0.05 -0.01  0.04  0.00 0.63
disrespected    0.54 -0.01  0.09  0.31  0.02 -0.02 -0.05  0.07  0.06 -0.10  0.02 -0.01 -0.07 0.60
embarrassed    -0.06  0.01 -0.03  0.91 -0.03 -0.03 -0.03 -0.03 -0.01  0.13  0.09 -0.02  0.13 0.84
emo_recog       0.11  0.01  0.04  0.04  0.49  0.03  0.07 -0.15  0.11  0.01  0.13 -0.30  0.08 0.49
fear            0.07 -0.01  0.03 -0.01  0.02 -0.02  0.83  0.05 -0.01  0.01  0.11  0.04  0.02 0.91
free_will      -0.03  0.00 -0.03  0.04 -0.03  0.62  0.02  0.09  0.11  0.13 -0.16 -0.04  0.08 0.51
goal           -0.20 -0.01  0.09  0.06  0.26  0.22  0.22  0.18 -0.03  0.22  0.02 -0.02 -0.05 0.35
guilt           0.12  0.03  0.01  0.85  0.10  0.03  0.02  0.05  0.01 -0.15 -0.06  0.03 -0.15 0.93
happy           0.78  0.07 -0.10 -0.04  0.06  0.06  0.10  0.06  0.08 -0.06  0.03  0.07  0.03 0.81
hungry         -0.07 -0.28  0.09  0.06 -0.07 -0.02  0.20  0.29  0.21 -0.13  0.15  0.18  0.17 0.89
intentions      0.00  0.20  0.04  0.06  0.12  0.09  0.02  0.04  0.11  0.52 -0.10 -0.07 -0.04 0.59
joy             0.62  0.07 -0.04  0.09  0.09 -0.06  0.03  0.19 -0.15  0.00  0.15 -0.03  0.20 0.84
love            0.47 -0.05  0.07  0.14  0.18  0.04 -0.07  0.27 -0.01  0.03  0.21 -0.07 -0.07 0.74
morality        0.06  0.12  0.09  0.04  0.35  0.01  0.01 -0.03 -0.05  0.28  0.14  0.01 -0.11 0.43
nauseated       0.13  0.04  0.07 -0.04 -0.05  0.06  0.16  0.37 -0.04 -0.07  0.19  0.11  0.17 0.61
odors          -0.10 -0.16  0.31  0.11 -0.02  0.05  0.05  0.07  0.18 -0.12  0.14  0.06  0.37 0.61
pain            0.00  0.06  0.03  0.08 -0.05 -0.06  0.31  0.16  0.21 -0.13  0.12  0.40  0.10 0.81
personality     0.13  0.11 -0.08  0.04  0.54  0.10 -0.09  0.07 -0.10 -0.05  0.01 -0.01  0.20 0.50
pleasure        0.15 -0.01  0.01  0.10  0.03  0.04  0.23  0.03 -0.04 -0.04  0.60  0.04  0.03 0.76
pride           0.53 -0.07  0.07  0.24  0.11  0.00  0.08  0.09 -0.13  0.21 -0.10  0.00  0.06 0.72
reasoning       0.04  0.31  0.04  0.03  0.01  0.39  0.15 -0.01  0.12 -0.05 -0.12 -0.26  0.20 0.56
recognizing     0.01  0.76  0.07 -0.02  0.13  0.03 -0.08 -0.01 -0.08  0.05 -0.01  0.06  0.03 0.75
remembering     0.05  0.52  0.10  0.00 -0.05  0.12 -0.10  0.09  0.12  0.16  0.16 -0.19 -0.17 0.60
safe            0.07 -0.11  0.08 -0.02  0.18  0.08  0.45  0.15  0.24 -0.10  0.01 -0.03  0.08 0.72
seeing         -0.02  0.04  0.62  0.04 -0.10  0.12 -0.01 -0.03  0.09  0.01  0.07  0.05 -0.01 0.50
self_aware      0.12  0.10  0.08  0.00  0.13  0.07 -0.02  0.06  0.52  0.11 -0.09  0.02  0.04 0.47
self_restraint  0.19  0.01  0.07  0.03  0.37  0.21 -0.10 -0.16  0.00  0.08  0.05  0.18  0.09 0.42
sounds          0.03  0.15  0.61 -0.05 -0.10 -0.04  0.15  0.07 -0.09  0.06 -0.05 -0.11  0.04 0.48
temperature     0.02 -0.01  0.78 -0.05  0.07 -0.09 -0.02  0.00  0.02  0.04 -0.02  0.04  0.00 0.58
thoughts        0.18  0.03 -0.07 -0.02  0.10  0.31 -0.05 -0.04  0.31  0.25  0.15  0.21  0.08 0.57
tired           0.02  0.03  0.16  0.05  0.01  0.06  0.28  0.20  0.04 -0.07  0.15  0.33  0.06 0.69
                  u2 com
angry          0.427 4.8
beliefs        0.323 1.1
calm           0.445 4.9
choices        0.413 1.1
communicating  0.333 1.1
computations   0.155 4.4
conscious      0.545 3.1
depressed      0.191 1.1
depth          0.515 1.7
desires        0.370 1.1
disrespected   0.403 1.9
embarrassed    0.160 1.1
emo_recog      0.513 2.5
fear           0.087 1.1
free_will      0.492 1.4
goal           0.654 6.3
guilt          0.070 1.2
happy          0.189 1.2
hungry         0.112 6.9
intentions     0.415 1.8
joy            0.162 1.9
love           0.262 3.0
morality       0.570 3.1
nauseated      0.391 3.5
odors          0.391 4.3
pain           0.192 3.9
personality    0.501 1.9
pleasure       0.242 1.6
pride          0.282 2.4
reasoning      0.438 4.3
recognizing    0.251 1.2
remembering    0.396 2.6
safe           0.283 2.9
seeing         0.498 1.2
self_aware     0.529 1.7
self_restraint 0.582 4.0
sounds         0.519 1.5
temperature    0.423 1.1
thoughts       0.433 5.6
tired          0.313 4.1

                       MR1  MR2  MR3  MR4  MR7  MR5  MR6  MR9 MR13 MR10 MR12 MR11  MR8
SS loadings           3.84 2.55 2.36 2.39 2.28 2.15 2.51 1.93 1.18 1.10 1.20 1.12 0.93
Proportion Var        0.10 0.06 0.06 0.06 0.06 0.05 0.06 0.05 0.03 0.03 0.03 0.03 0.02
Cumulative Var        0.10 0.16 0.22 0.28 0.34 0.39 0.45 0.50 0.53 0.56 0.59 0.62 0.64
Proportion Explained  0.15 0.10 0.09 0.09 0.09 0.08 0.10 0.08 0.05 0.04 0.05 0.04 0.04
Cumulative Proportion 0.15 0.25 0.34 0.44 0.53 0.61 0.71 0.78 0.83 0.87 0.92 0.96 1.00

 With factor correlations of 
      MR1   MR2  MR3  MR4   MR7  MR5   MR6   MR9  MR13  MR10  MR12  MR11   MR8
MR1  1.00  0.07 0.05 0.53  0.43 0.18  0.38  0.37  0.08  0.12  0.33  0.15  0.14
MR2  0.07  1.00 0.27 0.07  0.28 0.34 -0.17 -0.16 -0.09  0.36 -0.10 -0.28 -0.13
MR3  0.05  0.27 1.00 0.11  0.17 0.34  0.25  0.23  0.18  0.01  0.19  0.03  0.09
MR4  0.53  0.07 0.11 1.00  0.34 0.12  0.22  0.27  0.05  0.11  0.18  0.11  0.11
MR7  0.43  0.28 0.17 0.34  1.00 0.30  0.07  0.13  0.08  0.28  0.13 -0.06  0.04
MR5  0.18  0.34 0.34 0.12  0.30 1.00  0.15  0.15  0.31  0.18  0.07  0.00  0.14
MR6  0.38 -0.17 0.25 0.22  0.07 0.15  1.00  0.53  0.34 -0.16  0.31  0.38  0.36
MR9  0.37 -0.16 0.23 0.27  0.13 0.15  0.53  1.00  0.25 -0.11  0.32  0.30  0.28
MR13 0.08 -0.09 0.18 0.05  0.08 0.31  0.34  0.25  1.00 -0.03  0.13  0.21  0.24
MR10 0.12  0.36 0.01 0.11  0.28 0.18 -0.16 -0.11 -0.03  1.00 -0.09 -0.15 -0.09
MR12 0.33 -0.10 0.19 0.18  0.13 0.07  0.31  0.32  0.13 -0.09  1.00  0.20  0.22
MR11 0.15 -0.28 0.03 0.11 -0.06 0.00  0.38  0.30  0.21 -0.15  0.20  1.00  0.20
MR8  0.14 -0.13 0.09 0.11  0.04 0.14  0.36  0.28  0.24 -0.09  0.22  0.20  1.00

Mean item complexity =  2.6
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.29 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  118.47  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  403.84  with prob <  0.008 

Tucker Lewis Index of factoring reliability =  0.963
RMSEA index =  0.042  and the 90 % confidence intervals are  0.017 0.042
BIC =  -1386.99
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR7  MR5  MR6  MR9 MR13 MR10
Correlation of scores with factors             0.96 0.94 0.91 0.97 0.90 0.89 0.95 0.89 0.84 0.84
Multiple R square of scores with factors       0.93 0.88 0.82 0.94 0.82 0.80 0.91 0.79 0.71 0.70
Minimum correlation of possible factor scores  0.85 0.76 0.65 0.88 0.63 0.60 0.82 0.57 0.42 0.40
                                               MR12 MR11  MR8
Correlation of scores with factors             0.86 0.83 0.81
Multiple R square of scores with factors       0.73 0.68 0.66
Minimum correlation of possible factor scores  0.47 0.37 0.31
efa_adult_max_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Small rotated solution

# do factor analysis
efa_adult_small_rot <- fa(d3_adult, nfactors = efa_adult_max_unrot_nfactors, rotate = rot_type, cor = cor_type)
efa_adult_small_rot
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = efa_adult_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR3   MR2   h2   u2 com
angry           0.49  0.27  0.09 0.43 0.57 1.6
beliefs         0.48 -0.13  0.28 0.37 0.63 1.8
calm            0.39  0.45  0.12 0.50 0.50 2.1
choices         0.02  0.11  0.57 0.35 0.65 1.1
communicating   0.05 -0.30  0.58 0.44 0.56 1.5
computations    0.03 -0.82  0.37 0.82 0.18 1.4
conscious      -0.06  0.36  0.51 0.36 0.64 1.8
depressed       0.84  0.06 -0.07 0.71 0.29 1.0
depth          -0.16  0.16  0.60 0.34 0.66 1.3
desires         0.30  0.47  0.16 0.45 0.55 2.0
disrespected    0.74  0.04 -0.05 0.54 0.46 1.0
embarrassed     0.63 -0.06 -0.04 0.37 0.63 1.0
emo_recog       0.40 -0.17  0.27 0.28 0.72 2.2
fear            0.26  0.69  0.09 0.68 0.32 1.3
free_will      -0.01  0.11  0.49 0.24 0.76 1.1
goal            0.12  0.15  0.41 0.25 0.75 1.4
guilt           0.72 -0.03 -0.02 0.50 0.50 1.0
happy           0.80  0.14 -0.04 0.71 0.29 1.1
hungry         -0.01  0.94 -0.09 0.88 0.12 1.0
intentions      0.22 -0.34  0.45 0.39 0.61 2.4
joy             0.85  0.09 -0.08 0.75 0.25 1.0
love            0.77  0.09  0.05 0.66 0.34 1.0
morality        0.40 -0.28  0.30 0.34 0.66 2.7
nauseated       0.24  0.61  0.11 0.54 0.46 1.4
odors          -0.09  0.71  0.22 0.50 0.50 1.2
pain            0.11  0.80  0.04 0.71 0.29 1.0
personality     0.49 -0.15  0.21 0.32 0.68 1.6
pleasure        0.45  0.44  0.02 0.53 0.47 2.0
pride           0.85 -0.07 -0.02 0.67 0.33 1.0
reasoning       0.05  0.02  0.60 0.38 0.62 1.0
recognizing     0.13 -0.45  0.61 0.61 0.39 1.9
remembering     0.11 -0.33  0.58 0.48 0.52 1.7
safe            0.20  0.68  0.20 0.64 0.36 1.4
seeing         -0.16  0.31  0.58 0.36 0.64 1.7
self_aware      0.12  0.22  0.40 0.27 0.73 1.8
self_restraint  0.38 -0.08  0.30 0.29 0.71 2.0
sounds         -0.11  0.18  0.52 0.27 0.73 1.3
temperature    -0.13  0.24  0.54 0.30 0.70 1.5
thoughts        0.29  0.19  0.34 0.32 0.68 2.6
tired           0.16  0.70  0.20 0.63 0.37 1.3

                       MR1  MR3  MR2
SS loadings           7.45 6.63 5.09
Proportion Var        0.19 0.17 0.13
Cumulative Var        0.19 0.35 0.48
Proportion Explained  0.39 0.35 0.27
Cumulative Proportion 0.39 0.73 1.00

 With factor correlations of 
     MR1   MR3   MR2
MR1 1.00  0.30  0.29
MR3 0.30  1.00 -0.03
MR2 0.29 -0.03  1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 663  and the objective function was  6.63 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  196 with the empirical chi square  754.59  with prob <  0.0076 
The total number of observations was  200  with MLE Chi Square =  1211.29  with prob <  1.3e-34 

Tucker Lewis Index of factoring reliability =  0.848
RMSEA index =  0.07  and the 90 % confidence intervals are  0.059 NA
BIC =  -2301.5
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                MR1  MR3  MR2
Correlation of scores with factors             0.97 0.98 0.95
Multiple R square of scores with factors       0.95 0.96 0.90
Minimum correlation of possible factor scores  0.90 0.91 0.80
# examine eigenvalues and variance explained
efa_adult_small_rot_eigenvalues <- print(efa_adult_small_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_adult, nfactors = efa_adult_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR3   MR2   h2   u2 com
angry           0.49  0.27  0.09 0.43 0.57 1.6
beliefs         0.48 -0.13  0.28 0.37 0.63 1.8
calm            0.39  0.45  0.12 0.50 0.50 2.1
choices         0.02  0.11  0.57 0.35 0.65 1.1
communicating   0.05 -0.30  0.58 0.44 0.56 1.5
computations    0.03 -0.82  0.37 0.82 0.18 1.4
conscious      -0.06  0.36  0.51 0.36 0.64 1.8
depressed       0.84  0.06 -0.07 0.71 0.29 1.0
depth          -0.16  0.16  0.60 0.34 0.66 1.3
desires         0.30  0.47  0.16 0.45 0.55 2.0
disrespected    0.74  0.04 -0.05 0.54 0.46 1.0
embarrassed     0.63 -0.06 -0.04 0.37 0.63 1.0
emo_recog       0.40 -0.17  0.27 0.28 0.72 2.2
fear            0.26  0.69  0.09 0.68 0.32 1.3
free_will      -0.01  0.11  0.49 0.24 0.76 1.1
goal            0.12  0.15  0.41 0.25 0.75 1.4
guilt           0.72 -0.03 -0.02 0.50 0.50 1.0
happy           0.80  0.14 -0.04 0.71 0.29 1.1
hungry         -0.01  0.94 -0.09 0.88 0.12 1.0
intentions      0.22 -0.34  0.45 0.39 0.61 2.4
joy             0.85  0.09 -0.08 0.75 0.25 1.0
love            0.77  0.09  0.05 0.66 0.34 1.0
morality        0.40 -0.28  0.30 0.34 0.66 2.7
nauseated       0.24  0.61  0.11 0.54 0.46 1.4
odors          -0.09  0.71  0.22 0.50 0.50 1.2
pain            0.11  0.80  0.04 0.71 0.29 1.0
personality     0.49 -0.15  0.21 0.32 0.68 1.6
pleasure        0.45  0.44  0.02 0.53 0.47 2.0
pride           0.85 -0.07 -0.02 0.67 0.33 1.0
reasoning       0.05  0.02  0.60 0.38 0.62 1.0
recognizing     0.13 -0.45  0.61 0.61 0.39 1.9
remembering     0.11 -0.33  0.58 0.48 0.52 1.7
safe            0.20  0.68  0.20 0.64 0.36 1.4
seeing         -0.16  0.31  0.58 0.36 0.64 1.7
self_aware      0.12  0.22  0.40 0.27 0.73 1.8
self_restraint  0.38 -0.08  0.30 0.29 0.71 2.0
sounds         -0.11  0.18  0.52 0.27 0.73 1.3
temperature    -0.13  0.24  0.54 0.30 0.70 1.5
thoughts        0.29  0.19  0.34 0.32 0.68 2.6
tired           0.16  0.70  0.20 0.63 0.37 1.3

                       MR1  MR3  MR2
SS loadings           7.45 6.63 5.09
Proportion Var        0.19 0.17 0.13
Cumulative Var        0.19 0.35 0.48
Proportion Explained  0.39 0.35 0.27
Cumulative Proportion 0.39 0.73 1.00

 With factor correlations of 
     MR1   MR3   MR2
MR1 1.00  0.30  0.29
MR3 0.30  1.00 -0.03
MR2 0.29 -0.03  1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 663  and the objective function was  6.63 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  196 with the empirical chi square  754.59  with prob <  0.0076 
The total number of observations was  200  with MLE Chi Square =  1211.29  with prob <  1.3e-34 

Tucker Lewis Index of factoring reliability =  0.848
RMSEA index =  0.07  and the 90 % confidence intervals are  0.059 NA
BIC =  -2301.5
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                MR1  MR3  MR2
Correlation of scores with factors             0.97 0.98 0.95
Multiple R square of scores with factors       0.95 0.96 0.90
Minimum correlation of possible factor scores  0.90 0.91 0.80
efa_adult_small_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Loadings

# make dataframe for all factor loadings and dominant factor
efa_adult_small_rot_loadings <- efa_adult_small_rot$loadings[] %>%
  fa.sort() %>%
  data.frame() %>%
  rownames_to_column(var = "capacity") %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA)))) %>%
  select(capacity, F1, F2, F3, factor, factorName, loading, loading_abs) %>%
  distinct() %>%
  full_join(d %>% select(capacity, capWording)) %>%
  mutate(capWording = gsub("\\ ", "_", gsub(" --.*", "", capWording))) %>%
  select(capacity, capWording, F1:loading_abs) %>%
  distinct()
Joining, by = "capacity"
joining factor and character vector, coercing into character vector
# print out list of items by dominant factor
efa_adult_small_rot_items <- efa_adult_small_rot_loadings %>%
  arrange(factor, desc(loading_abs)) %>%
  mutate(capWordingPlus = ifelse(loading > 0, capWording, 
                                 paste0(capWording, " (negative loading)"))) %>%
  group_by(factor) %>%
  summarise(items = gsub("_", " ", paste(capWordingPlus, collapse = ", ")))
head(efa_adult_small_rot_items$items, 40)
[1] "feel joy, feel proud, feel sad, feel happy, feel love, get hurt feelings, feel guilty, feel embarrassed, get angry, have a personality, have beliefs, feel pleasure, understand how somebody else is feeling, know what's nice and what's mean, have self-control"                                                  
[2] "recognize somebody else, sense whether something is close by or far away, figure out how to do things, see things, communicate with somebody else, remember things, make choices, sense temperatures, hear sounds, be aware of things, decide what to do, make plans, have goals, be aware of itself, have thoughts"
[3] "get hungry, do math (negative loading), feel pain, smell things, feel tired, feel scared, feel safe, feel sick, have desires, feel calm"                                                                                                                                                                            

Children alone

Exploratory factor analysis

Maximal (13-factor) unrotated solution

# do factor analysis
efa_child_max_unrot <- fa(d3_child, nfactors = 13, rotate = "none", cor = cor_type)
efa_child_max_unrot
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR5   MR6   MR4   MR7   MR8   MR9  MR11  MR10  MR12  MR13   h2
angry           0.59 -0.05 -0.09  0.14 -0.04  0.05  0.15  0.06 -0.02 -0.04 -0.06 -0.06 -0.02 0.41
beliefs         0.47  0.32 -0.05  0.14 -0.03  0.08  0.11 -0.15 -0.04  0.16  0.03 -0.01  0.10 0.43
calm            0.55  0.04 -0.01 -0.04  0.04 -0.07 -0.08 -0.09 -0.02 -0.15  0.10  0.15  0.10 0.39
choices         0.41  0.09  0.23  0.44  0.06  0.05 -0.05 -0.20 -0.09  0.05 -0.14 -0.19  0.02 0.53
communicating   0.03  0.27  0.15 -0.14  0.32  0.00  0.05  0.05  0.30 -0.05 -0.01 -0.12 -0.09 0.34
computations   -0.16  0.79  0.08 -0.01 -0.04  0.08  0.09 -0.17  0.01 -0.12  0.05 -0.10  0.05 0.74
conscious       0.35  0.09  0.46 -0.07  0.31 -0.02  0.11  0.26 -0.13  0.00  0.14  0.07  0.05 0.57
depressed       0.70  0.04 -0.16 -0.05  0.08  0.05 -0.13  0.08  0.12 -0.21 -0.16 -0.08  0.05 0.64
depth           0.11  0.19  0.41 -0.11 -0.13  0.25  0.11 -0.11  0.06  0.08  0.12  0.20 -0.07 0.40
desires         0.53 -0.11 -0.10  0.09  0.15  0.00  0.11 -0.13  0.00  0.13 -0.02  0.15  0.14 0.42
disrespected    0.67  0.13 -0.14  0.11  0.06  0.12 -0.08  0.13 -0.12  0.07  0.14 -0.06 -0.03 0.59
embarrassed     0.50  0.16 -0.31  0.02  0.01  0.26  0.40  0.09 -0.08 -0.01 -0.07 -0.02  0.01 0.62
emo_recog       0.25  0.54  0.03 -0.05 -0.12  0.06  0.03  0.26  0.07  0.02  0.06 -0.10  0.02 0.46
fear            0.62 -0.29  0.04 -0.05  0.09 -0.10  0.10  0.07  0.24 -0.05 -0.21  0.22 -0.09 0.67
free_will       0.49  0.04  0.29  0.27  0.12  0.01 -0.08 -0.26 -0.06  0.11 -0.07  0.09 -0.06 0.51
goal            0.28  0.37  0.00  0.12  0.04 -0.07  0.04 -0.03  0.11 -0.16 -0.10  0.09  0.25 0.36
guilt           0.54  0.21 -0.16 -0.10 -0.06  0.22  0.27 -0.09 -0.08  0.06  0.08  0.16 -0.10 0.55
happy           0.69  0.25 -0.21 -0.16  0.21 -0.04 -0.07 -0.07 -0.02 -0.01  0.06 -0.06 -0.14 0.69
hungry          0.51 -0.70  0.12 -0.04 -0.06  0.15 -0.04 -0.02 -0.03  0.01 -0.04 -0.02 -0.02 0.80
intentions      0.27  0.44  0.20  0.25 -0.04  0.16 -0.06 -0.09 -0.11 -0.15 -0.03  0.06 -0.28 0.53
joy             0.68  0.17 -0.27 -0.10  0.15 -0.03 -0.13 -0.07  0.02  0.02  0.13 -0.11  0.01 0.65
love            0.58  0.16 -0.20 -0.14  0.02  0.16 -0.12  0.11 -0.13  0.12  0.05  0.05  0.04 0.51
morality        0.38  0.44 -0.04  0.00 -0.46 -0.10 -0.09  0.14  0.18  0.19  0.11  0.02 -0.06 0.68
nauseated       0.37 -0.38  0.02 -0.11 -0.15  0.23  0.09 -0.03  0.11 -0.01 -0.15 -0.07  0.05 0.41
odors           0.26 -0.55  0.29  0.04 -0.01  0.05  0.19 -0.14  0.22 -0.04  0.27 -0.13 -0.10 0.67
pain            0.56 -0.57  0.12  0.05 -0.07  0.09 -0.12 -0.02  0.00  0.11  0.05 -0.03  0.12 0.71
personality     0.48  0.37  0.03  0.17 -0.20  0.10  0.16  0.03  0.11 -0.02 -0.06 -0.05  0.19 0.52
pleasure        0.59  0.17 -0.17 -0.16  0.08 -0.22 -0.16 -0.21  0.06 -0.01  0.10  0.14  0.07 0.59
pride           0.63  0.31 -0.28 -0.08  0.01 -0.04  0.01 -0.01 -0.07 -0.03 -0.05 -0.01 -0.09 0.60
reasoning       0.18  0.27  0.34  0.06  0.21  0.00 -0.08  0.03  0.20  0.13 -0.01  0.09  0.18 0.37
recognizing     0.14  0.33  0.17 -0.06 -0.05  0.05  0.09 -0.06  0.29 -0.05  0.10  0.11  0.11 0.29
remembering    -0.03  0.55  0.24 -0.05  0.16  0.07 -0.07  0.01  0.14  0.29 -0.31 -0.11 -0.09 0.61
safe            0.64  0.00  0.32 -0.12 -0.19 -0.44  0.12 -0.03 -0.12 -0.03 -0.08 -0.07 -0.04 0.80
seeing         -0.09  0.08  0.21  0.11  0.16 -0.01 -0.14  0.16  0.13  0.19  0.13  0.02 -0.16 0.24
self_aware      0.24  0.19  0.46  0.17  0.15 -0.07  0.12  0.33 -0.18 -0.03  0.05  0.06  0.04 0.52
self_restraint  0.29  0.21  0.11  0.37 -0.17  0.13 -0.33  0.10  0.05 -0.25  0.02  0.16 -0.09 0.54
sounds         -0.08  0.03  0.33  0.09  0.19 -0.05  0.16 -0.05  0.17 -0.14  0.17 -0.13 -0.04 0.28
temperature    -0.09  0.27  0.54 -0.43 -0.08  0.29 -0.15 -0.09 -0.12 -0.06 -0.06  0.02  0.04 0.71
thoughts        0.57  0.10  0.18  0.05 -0.01 -0.11 -0.16  0.04 -0.03  0.00  0.09 -0.13  0.15 0.46
tired           0.45 -0.28  0.02 -0.11 -0.05  0.23 -0.10  0.21  0.09 -0.16 -0.04 -0.15 -0.01 0.45
                 u2 com
angry          0.59 1.4
beliefs        0.57 3.0
calm           0.61 1.7
choices        0.47 4.0
communicating  0.66 4.6
computations   0.26 1.4
conscious      0.43 4.3
depressed      0.36 1.7
depth          0.60 4.4
desires        0.58 2.2
disrespected   0.41 1.7
embarrassed    0.38 3.8
emo_recog      0.54 2.3
fear           0.33 2.7
free_will      0.49 3.6
goal           0.64 4.3
guilt          0.45 3.2
happy          0.31 2.0
hungry         0.20 2.1
intentions     0.47 4.9
joy            0.35 1.9
love           0.49 2.2
morality       0.32 4.3
nauseated      0.59 4.0
odors          0.33 3.8
pain           0.29 2.5
personality    0.48 3.7
pleasure       0.41 2.7
pride          0.40 2.0
reasoning      0.63 5.6
recognizing    0.71 4.2
remembering    0.39 3.4
safe           0.20 3.0
seeing         0.76 8.8
self_aware     0.48 4.4
self_restraint 0.46 6.4
sounds         0.72 5.0
temperature    0.29 3.7
thoughts       0.54 1.9
tired          0.55 4.0

                       MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11 MR10 MR12 MR13
SS loadings           8.10 4.24 2.16 1.00 0.89 0.82 0.78 0.70 0.64 0.53 0.52 0.46 0.44
Proportion Var        0.20 0.11 0.05 0.02 0.02 0.02 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.20 0.31 0.36 0.39 0.41 0.43 0.45 0.47 0.48 0.50 0.51 0.52 0.53
Proportion Explained  0.38 0.20 0.10 0.05 0.04 0.04 0.04 0.03 0.03 0.02 0.02 0.02 0.02
Cumulative Proportion 0.38 0.58 0.68 0.73 0.77 0.81 0.85 0.88 0.91 0.93 0.96 0.98 1.00

Mean item complexity =  3.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11
Correlation of scores with factors             0.98 0.96 0.92 0.84 0.83 0.84 0.81 0.78 0.76 0.73
Multiple R square of scores with factors       0.95 0.93 0.84 0.70 0.68 0.71 0.65 0.61 0.58 0.54
Minimum correlation of possible factor scores  0.91 0.85 0.69 0.41 0.37 0.42 0.30 0.22 0.17 0.08
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.69
Multiple R square of scores with factors       0.56 0.50  0.48
Minimum correlation of possible factor scores  0.12 0.00 -0.05
# examine eigenvalues and variance explained
efa_child_max_unrot_eigenvalues <- print(efa_child_max_unrot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR5   MR6   MR4   MR7   MR8   MR9  MR11  MR10  MR12  MR13   h2
angry           0.59 -0.05 -0.09  0.14 -0.04  0.05  0.15  0.06 -0.02 -0.04 -0.06 -0.06 -0.02 0.41
beliefs         0.47  0.32 -0.05  0.14 -0.03  0.08  0.11 -0.15 -0.04  0.16  0.03 -0.01  0.10 0.43
calm            0.55  0.04 -0.01 -0.04  0.04 -0.07 -0.08 -0.09 -0.02 -0.15  0.10  0.15  0.10 0.39
choices         0.41  0.09  0.23  0.44  0.06  0.05 -0.05 -0.20 -0.09  0.05 -0.14 -0.19  0.02 0.53
communicating   0.03  0.27  0.15 -0.14  0.32  0.00  0.05  0.05  0.30 -0.05 -0.01 -0.12 -0.09 0.34
computations   -0.16  0.79  0.08 -0.01 -0.04  0.08  0.09 -0.17  0.01 -0.12  0.05 -0.10  0.05 0.74
conscious       0.35  0.09  0.46 -0.07  0.31 -0.02  0.11  0.26 -0.13  0.00  0.14  0.07  0.05 0.57
depressed       0.70  0.04 -0.16 -0.05  0.08  0.05 -0.13  0.08  0.12 -0.21 -0.16 -0.08  0.05 0.64
depth           0.11  0.19  0.41 -0.11 -0.13  0.25  0.11 -0.11  0.06  0.08  0.12  0.20 -0.07 0.40
desires         0.53 -0.11 -0.10  0.09  0.15  0.00  0.11 -0.13  0.00  0.13 -0.02  0.15  0.14 0.42
disrespected    0.67  0.13 -0.14  0.11  0.06  0.12 -0.08  0.13 -0.12  0.07  0.14 -0.06 -0.03 0.59
embarrassed     0.50  0.16 -0.31  0.02  0.01  0.26  0.40  0.09 -0.08 -0.01 -0.07 -0.02  0.01 0.62
emo_recog       0.25  0.54  0.03 -0.05 -0.12  0.06  0.03  0.26  0.07  0.02  0.06 -0.10  0.02 0.46
fear            0.62 -0.29  0.04 -0.05  0.09 -0.10  0.10  0.07  0.24 -0.05 -0.21  0.22 -0.09 0.67
free_will       0.49  0.04  0.29  0.27  0.12  0.01 -0.08 -0.26 -0.06  0.11 -0.07  0.09 -0.06 0.51
goal            0.28  0.37  0.00  0.12  0.04 -0.07  0.04 -0.03  0.11 -0.16 -0.10  0.09  0.25 0.36
guilt           0.54  0.21 -0.16 -0.10 -0.06  0.22  0.27 -0.09 -0.08  0.06  0.08  0.16 -0.10 0.55
happy           0.69  0.25 -0.21 -0.16  0.21 -0.04 -0.07 -0.07 -0.02 -0.01  0.06 -0.06 -0.14 0.69
hungry          0.51 -0.70  0.12 -0.04 -0.06  0.15 -0.04 -0.02 -0.03  0.01 -0.04 -0.02 -0.02 0.80
intentions      0.27  0.44  0.20  0.25 -0.04  0.16 -0.06 -0.09 -0.11 -0.15 -0.03  0.06 -0.28 0.53
joy             0.68  0.17 -0.27 -0.10  0.15 -0.03 -0.13 -0.07  0.02  0.02  0.13 -0.11  0.01 0.65
love            0.58  0.16 -0.20 -0.14  0.02  0.16 -0.12  0.11 -0.13  0.12  0.05  0.05  0.04 0.51
morality        0.38  0.44 -0.04  0.00 -0.46 -0.10 -0.09  0.14  0.18  0.19  0.11  0.02 -0.06 0.68
nauseated       0.37 -0.38  0.02 -0.11 -0.15  0.23  0.09 -0.03  0.11 -0.01 -0.15 -0.07  0.05 0.41
odors           0.26 -0.55  0.29  0.04 -0.01  0.05  0.19 -0.14  0.22 -0.04  0.27 -0.13 -0.10 0.67
pain            0.56 -0.57  0.12  0.05 -0.07  0.09 -0.12 -0.02  0.00  0.11  0.05 -0.03  0.12 0.71
personality     0.48  0.37  0.03  0.17 -0.20  0.10  0.16  0.03  0.11 -0.02 -0.06 -0.05  0.19 0.52
pleasure        0.59  0.17 -0.17 -0.16  0.08 -0.22 -0.16 -0.21  0.06 -0.01  0.10  0.14  0.07 0.59
pride           0.63  0.31 -0.28 -0.08  0.01 -0.04  0.01 -0.01 -0.07 -0.03 -0.05 -0.01 -0.09 0.60
reasoning       0.18  0.27  0.34  0.06  0.21  0.00 -0.08  0.03  0.20  0.13 -0.01  0.09  0.18 0.37
recognizing     0.14  0.33  0.17 -0.06 -0.05  0.05  0.09 -0.06  0.29 -0.05  0.10  0.11  0.11 0.29
remembering    -0.03  0.55  0.24 -0.05  0.16  0.07 -0.07  0.01  0.14  0.29 -0.31 -0.11 -0.09 0.61
safe            0.64  0.00  0.32 -0.12 -0.19 -0.44  0.12 -0.03 -0.12 -0.03 -0.08 -0.07 -0.04 0.80
seeing         -0.09  0.08  0.21  0.11  0.16 -0.01 -0.14  0.16  0.13  0.19  0.13  0.02 -0.16 0.24
self_aware      0.24  0.19  0.46  0.17  0.15 -0.07  0.12  0.33 -0.18 -0.03  0.05  0.06  0.04 0.52
self_restraint  0.29  0.21  0.11  0.37 -0.17  0.13 -0.33  0.10  0.05 -0.25  0.02  0.16 -0.09 0.54
sounds         -0.08  0.03  0.33  0.09  0.19 -0.05  0.16 -0.05  0.17 -0.14  0.17 -0.13 -0.04 0.28
temperature    -0.09  0.27  0.54 -0.43 -0.08  0.29 -0.15 -0.09 -0.12 -0.06 -0.06  0.02  0.04 0.71
thoughts        0.57  0.10  0.18  0.05 -0.01 -0.11 -0.16  0.04 -0.03  0.00  0.09 -0.13  0.15 0.46
tired           0.45 -0.28  0.02 -0.11 -0.05  0.23 -0.10  0.21  0.09 -0.16 -0.04 -0.15 -0.01 0.45
                 u2 com
angry          0.59 1.4
beliefs        0.57 3.0
calm           0.61 1.7
choices        0.47 4.0
communicating  0.66 4.6
computations   0.26 1.4
conscious      0.43 4.3
depressed      0.36 1.7
depth          0.60 4.4
desires        0.58 2.2
disrespected   0.41 1.7
embarrassed    0.38 3.8
emo_recog      0.54 2.3
fear           0.33 2.7
free_will      0.49 3.6
goal           0.64 4.3
guilt          0.45 3.2
happy          0.31 2.0
hungry         0.20 2.1
intentions     0.47 4.9
joy            0.35 1.9
love           0.49 2.2
morality       0.32 4.3
nauseated      0.59 4.0
odors          0.33 3.8
pain           0.29 2.5
personality    0.48 3.7
pleasure       0.41 2.7
pride          0.40 2.0
reasoning      0.63 5.6
recognizing    0.71 4.2
remembering    0.39 3.4
safe           0.20 3.0
seeing         0.76 8.8
self_aware     0.48 4.4
self_restraint 0.46 6.4
sounds         0.72 5.0
temperature    0.29 3.7
thoughts       0.54 1.9
tired          0.55 4.0

                       MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11 MR10 MR12 MR13
SS loadings           8.10 4.24 2.16 1.00 0.89 0.82 0.78 0.70 0.64 0.53 0.52 0.46 0.44
Proportion Var        0.20 0.11 0.05 0.02 0.02 0.02 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.20 0.31 0.36 0.39 0.41 0.43 0.45 0.47 0.48 0.50 0.51 0.52 0.53
Proportion Explained  0.38 0.20 0.10 0.05 0.04 0.04 0.04 0.03 0.03 0.02 0.02 0.02 0.02
Cumulative Proportion 0.38 0.58 0.68 0.73 0.77 0.81 0.85 0.88 0.91 0.93 0.96 0.98 1.00

Mean item complexity =  3.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR5  MR6  MR4  MR7  MR8  MR9 MR11
Correlation of scores with factors             0.98 0.96 0.92 0.84 0.83 0.84 0.81 0.78 0.76 0.73
Multiple R square of scores with factors       0.95 0.93 0.84 0.70 0.68 0.71 0.65 0.61 0.58 0.54
Minimum correlation of possible factor scores  0.91 0.85 0.69 0.41 0.37 0.42 0.30 0.22 0.17 0.08
                                               MR10 MR12  MR13
Correlation of scores with factors             0.75 0.71  0.69
Multiple R square of scores with factors       0.56 0.50  0.48
Minimum correlation of possible factor scores  0.12 0.00 -0.05
# count factors with eigenvalues > 1 and variance explained > 5%
efa_child_max_unrot_nfactors <- efa_child_max_unrot_eigenvalues %>%
  filter(SS.loadings > 1, Proportion.Explained > 0.05) %>%
  count() %>%
  as.numeric()
efa_child_max_unrot_nfactors
[1] 3
# manually check that each factor is the dominant factor for at least one mental capacity item
efa_child_max_unrot_loadings <- fa.sort(loadings(efa_child_max_unrot)[]) %>%
  data.frame() %>%
  select(1:efa_child_max_unrot_nfactors) %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA))))
efa_child_max_unrot_loadings %>% count(factorName) # drop any factors where n < 1
# reset as needed
efa_child_max_unrot_nfactors <- efa_child_max_unrot_loadings %>% count(factorName) %>% nrow()

Maximal (13-factor) rotated solution

# do factor analysis
efa_child_max_rot <- fa(d3_child, nfactors = 13, rotate = rot_type, cor = cor_type)
convergence not obtained in GPFoblq. 1000 iterations used.
efa_child_max_rot
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR7   MR8  MR10  MR11   MR6   MR2   MR5   MR3   MR9   MR4  MR12  MR13   h2
angry           0.05  0.30  0.06  0.08  0.10  0.05  0.08  0.09 -0.17 -0.02  0.16  0.01  0.17 0.41
beliefs         0.17  0.29  0.02  0.01  0.02  0.15 -0.11  0.30 -0.03  0.07  0.05  0.15 -0.10 0.43
calm            0.37  0.00  0.09  0.00  0.11 -0.02  0.11  0.05  0.07 -0.24  0.11  0.18 -0.01 0.39
choices        -0.02  0.03  0.02  0.10  0.30 -0.12 -0.16  0.45 -0.11  0.21  0.17  0.06  0.07 0.53
communicating   0.21 -0.06  0.11  0.19 -0.04 -0.05  0.04 -0.26  0.02  0.39 -0.09  0.16  0.07 0.34
computations    0.07  0.13 -0.06 -0.06  0.14  0.06 -0.43 -0.13  0.20  0.15  0.00  0.33 -0.12 0.74
conscious       0.09  0.04  0.68  0.07 -0.05 -0.09  0.05 -0.02  0.13  0.00  0.07  0.00 -0.01 0.57
depressed       0.35  0.08 -0.03 -0.05  0.14 -0.03  0.19 -0.01 -0.02  0.04  0.08  0.15  0.42 0.64
depth          -0.11  0.17  0.09  0.22  0.11  0.17  0.09  0.03  0.40  0.01 -0.06  0.04 -0.23 0.40
desires         0.21  0.22  0.09  0.02 -0.07 -0.06  0.23  0.31 -0.13 -0.04  0.00  0.13 -0.11 0.42
disrespected    0.39  0.20  0.22  0.01  0.13  0.15 -0.07  0.16 -0.11 -0.04 -0.05 -0.13  0.14 0.59
embarrassed     0.03  0.72  0.07 -0.04 -0.03  0.01  0.03 -0.01 -0.11  0.00 -0.02  0.05  0.11 0.62
emo_recog       0.05  0.14  0.19 -0.07  0.02  0.39 -0.16 -0.14  0.04  0.13  0.01  0.09  0.15 0.46
fear            0.04  0.11  0.05  0.08  0.06 -0.02  0.65 -0.06 -0.11  0.08  0.19  0.07  0.07 0.67
free_will       0.13  0.00  0.06  0.10  0.29 -0.11  0.12  0.39  0.02  0.15  0.13  0.02 -0.17 0.51
goal            0.04  0.06  0.08 -0.16  0.09  0.00  0.05  0.05 -0.04 -0.01  0.06  0.47  0.05 0.36
guilt           0.22  0.57  0.00  0.05  0.06  0.11  0.09  0.01  0.10 -0.07  0.00 -0.02 -0.16 0.55
happy           0.70  0.14  0.02  0.01  0.07  0.00  0.02 -0.06 -0.02  0.11  0.10 -0.05  0.04 0.69
hungry          0.02  0.06 -0.03  0.28 -0.01 -0.09  0.29  0.26  0.09 -0.17  0.11 -0.22  0.24 0.80
intentions      0.05  0.15  0.02  0.00  0.61 -0.02 -0.08 -0.03  0.11  0.11  0.06 -0.05 -0.10 0.53
joy             0.69  0.06  0.00  0.04 -0.01  0.08 -0.06  0.07 -0.08  0.02  0.02  0.02  0.12 0.65
love            0.42  0.21  0.13 -0.17 -0.02  0.17  0.06  0.14  0.09 -0.06 -0.07 -0.11  0.12 0.51
morality        0.04 -0.01 -0.08 -0.02  0.07  0.75 -0.01 -0.03 -0.03  0.06  0.15  0.00 -0.03 0.68
nauseated      -0.11  0.22 -0.17  0.19 -0.08  0.02  0.24  0.15  0.14 -0.02  0.06 -0.01  0.29 0.41
odors          -0.02  0.00 -0.01  0.74 -0.03  0.00  0.03  0.03 -0.03 -0.10  0.06 -0.04  0.02 0.67
pain            0.09 -0.05  0.04  0.25 -0.06  0.05  0.20  0.41  0.02 -0.18  0.06 -0.11  0.21 0.71
personality    -0.10  0.29  0.03  0.01  0.08  0.28 -0.06  0.15 -0.03  0.05  0.10  0.33  0.15 0.52
pleasure        0.63 -0.10 -0.06 -0.05 -0.01  0.07  0.14  0.06  0.01 -0.10  0.14  0.17 -0.12 0.59
pride           0.44  0.26 -0.04 -0.15  0.11  0.08  0.03 -0.05 -0.07  0.04  0.18  0.00  0.06 0.60
reasoning       0.06 -0.16  0.28  0.03 -0.02  0.09  0.14  0.18  0.09  0.23 -0.12  0.27 -0.05 0.37
recognizing     0.02  0.04  0.03  0.16  0.02  0.22  0.07 -0.08  0.14  0.05 -0.07  0.36 -0.08 0.29
remembering    -0.02 -0.02  0.01 -0.16 -0.02  0.11  0.04  0.08  0.14  0.70 -0.01  0.00 -0.01 0.61
safe            0.04 -0.04  0.11  0.04 -0.04  0.11  0.06  0.00  0.04 -0.02  0.80 -0.01 -0.02 0.80
seeing          0.03 -0.22  0.24  0.12  0.08  0.16  0.04 -0.02 -0.09  0.24 -0.20 -0.16 -0.11 0.24
self_aware     -0.19  0.04  0.66 -0.06  0.11  0.00 -0.02  0.00 -0.02  0.00  0.15  0.01  0.00 0.52
self_restraint -0.02 -0.15  0.05 -0.05  0.67  0.16  0.09  0.03 -0.01 -0.15 -0.11  0.07  0.12 0.54
sounds         -0.03 -0.08  0.17  0.40  0.05 -0.13 -0.15 -0.15 -0.04  0.10  0.01  0.17 -0.04 0.28
temperature    -0.01 -0.06  0.05 -0.05  0.02 -0.05 -0.07  0.00  0.81  0.06  0.05  0.00  0.07 0.71
thoughts        0.26 -0.14  0.21  0.06  0.03  0.15 -0.10  0.21  0.02 -0.04  0.20  0.09  0.18 0.46
tired           0.09  0.06  0.03  0.16  0.07  0.04  0.15 -0.04  0.10 -0.06 -0.02 -0.09  0.49 0.45
                 u2 com
angry          0.59 4.2
beliefs        0.57 4.4
calm           0.61 3.3
choices        0.47 3.6
communicating  0.66 4.1
computations   0.26 3.9
conscious      0.43 1.2
depressed      0.36 3.3
depth          0.60 4.1
desires        0.58 5.5
disrespected   0.41 4.6
embarrassed    0.38 1.1
emo_recog      0.54 3.6
fear           0.33 1.5
free_will      0.49 4.0
goal           0.64 1.6
guilt          0.45 1.8
happy          0.31 1.2
hungry         0.20 6.4
intentions     0.47 1.4
joy            0.35 1.2
love           0.49 3.7
morality       0.32 1.1
nauseated      0.59 6.4
odors          0.33 1.1
pain           0.29 3.9
personality    0.48 4.6
pleasure       0.41 1.6
pride          0.40 2.8
reasoning      0.63 6.0
recognizing    0.71 3.0
remembering    0.39 1.3
safe           0.20 1.1
seeing         0.76 7.3
self_aware     0.48 1.4
self_restraint 0.46 1.6
sounds         0.72 3.2
temperature    0.29 1.1
thoughts       0.54 7.2
tired          0.55 1.8

                       MR1  MR7  MR8 MR10 MR11  MR6  MR2  MR5  MR3  MR9  MR4 MR12 MR13
SS loadings           3.29 2.12 1.61 1.47 1.52 1.52 1.59 1.53 1.21 1.34 1.49 1.29 1.31
Proportion Var        0.08 0.05 0.04 0.04 0.04 0.04 0.04 0.04 0.03 0.03 0.04 0.03 0.03
Cumulative Var        0.08 0.14 0.18 0.21 0.25 0.29 0.33 0.37 0.40 0.43 0.47 0.50 0.53
Proportion Explained  0.15 0.10 0.08 0.07 0.07 0.07 0.07 0.07 0.06 0.06 0.07 0.06 0.06
Cumulative Proportion 0.15 0.25 0.33 0.40 0.47 0.54 0.62 0.69 0.74 0.81 0.88 0.94 1.00

 With factor correlations of 
       MR1   MR7  MR8  MR10  MR11   MR6   MR2   MR5   MR3   MR9   MR4  MR12  MR13
MR1   1.00  0.41 0.18 -0.02  0.22  0.30  0.25  0.22 -0.08  0.04  0.35  0.19  0.23
MR7   0.41  1.00 0.09 -0.01  0.19  0.26  0.11  0.16 -0.05  0.03  0.22  0.13  0.18
MR8   0.18  0.09 1.00  0.16  0.26  0.14  0.08  0.14  0.17  0.22  0.26  0.16  0.07
MR10 -0.02 -0.01 0.16  1.00 -0.03 -0.15  0.36  0.24  0.04 -0.16  0.20 -0.12  0.15
MR11  0.22  0.19 0.26 -0.03  1.00  0.29 -0.05  0.22  0.06  0.18  0.21  0.25  0.07
MR6   0.30  0.26 0.14 -0.15  0.29  1.00 -0.02  0.06  0.11  0.11  0.20  0.23  0.07
MR2   0.25  0.11 0.08  0.36 -0.05 -0.02  1.00  0.28 -0.09 -0.26  0.26 -0.12  0.29
MR5   0.22  0.16 0.14  0.24  0.22  0.06  0.28  1.00 -0.07 -0.11  0.28 -0.04  0.20
MR3  -0.08 -0.05 0.17  0.04  0.06  0.11 -0.09 -0.07  1.00  0.21  0.00  0.08 -0.12
MR9   0.04  0.03 0.22 -0.16  0.18  0.11 -0.26 -0.11  0.21  1.00 -0.03  0.30 -0.18
MR4   0.35  0.22 0.26  0.20  0.21  0.20  0.26  0.28  0.00 -0.03  1.00  0.13  0.17
MR12  0.19  0.13 0.16 -0.12  0.25  0.23 -0.12 -0.04  0.08  0.30  0.13  1.00 -0.11
MR13  0.23  0.18 0.07  0.15  0.07  0.07  0.29  0.20 -0.12 -0.18  0.17 -0.11  1.00

Mean item complexity =  3.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR7  MR8 MR10 MR11  MR6  MR2  MR5  MR3  MR9
Correlation of scores with factors             0.93 0.89 0.87 0.87 0.86 0.87 0.88 0.85 0.87 0.85
Multiple R square of scores with factors       0.86 0.79 0.75 0.76 0.73 0.75 0.77 0.73 0.76 0.73
Minimum correlation of possible factor scores  0.73 0.58 0.51 0.53 0.47 0.51 0.54 0.45 0.53 0.45
                                                MR4 MR12 MR13
Correlation of scores with factors             0.90 0.83 0.83
Multiple R square of scores with factors       0.80 0.69 0.69
Minimum correlation of possible factor scores  0.61 0.37 0.38
# examine eigenvalues and variance explained
efa_child_max_rot_eigenvalues <- print(efa_child_max_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR7   MR8  MR10  MR11   MR6   MR2   MR5   MR3   MR9   MR4  MR12  MR13   h2
angry           0.05  0.30  0.06  0.08  0.10  0.05  0.08  0.09 -0.17 -0.02  0.16  0.01  0.17 0.41
beliefs         0.17  0.29  0.02  0.01  0.02  0.15 -0.11  0.30 -0.03  0.07  0.05  0.15 -0.10 0.43
calm            0.37  0.00  0.09  0.00  0.11 -0.02  0.11  0.05  0.07 -0.24  0.11  0.18 -0.01 0.39
choices        -0.02  0.03  0.02  0.10  0.30 -0.12 -0.16  0.45 -0.11  0.21  0.17  0.06  0.07 0.53
communicating   0.21 -0.06  0.11  0.19 -0.04 -0.05  0.04 -0.26  0.02  0.39 -0.09  0.16  0.07 0.34
computations    0.07  0.13 -0.06 -0.06  0.14  0.06 -0.43 -0.13  0.20  0.15  0.00  0.33 -0.12 0.74
conscious       0.09  0.04  0.68  0.07 -0.05 -0.09  0.05 -0.02  0.13  0.00  0.07  0.00 -0.01 0.57
depressed       0.35  0.08 -0.03 -0.05  0.14 -0.03  0.19 -0.01 -0.02  0.04  0.08  0.15  0.42 0.64
depth          -0.11  0.17  0.09  0.22  0.11  0.17  0.09  0.03  0.40  0.01 -0.06  0.04 -0.23 0.40
desires         0.21  0.22  0.09  0.02 -0.07 -0.06  0.23  0.31 -0.13 -0.04  0.00  0.13 -0.11 0.42
disrespected    0.39  0.20  0.22  0.01  0.13  0.15 -0.07  0.16 -0.11 -0.04 -0.05 -0.13  0.14 0.59
embarrassed     0.03  0.72  0.07 -0.04 -0.03  0.01  0.03 -0.01 -0.11  0.00 -0.02  0.05  0.11 0.62
emo_recog       0.05  0.14  0.19 -0.07  0.02  0.39 -0.16 -0.14  0.04  0.13  0.01  0.09  0.15 0.46
fear            0.04  0.11  0.05  0.08  0.06 -0.02  0.65 -0.06 -0.11  0.08  0.19  0.07  0.07 0.67
free_will       0.13  0.00  0.06  0.10  0.29 -0.11  0.12  0.39  0.02  0.15  0.13  0.02 -0.17 0.51
goal            0.04  0.06  0.08 -0.16  0.09  0.00  0.05  0.05 -0.04 -0.01  0.06  0.47  0.05 0.36
guilt           0.22  0.57  0.00  0.05  0.06  0.11  0.09  0.01  0.10 -0.07  0.00 -0.02 -0.16 0.55
happy           0.70  0.14  0.02  0.01  0.07  0.00  0.02 -0.06 -0.02  0.11  0.10 -0.05  0.04 0.69
hungry          0.02  0.06 -0.03  0.28 -0.01 -0.09  0.29  0.26  0.09 -0.17  0.11 -0.22  0.24 0.80
intentions      0.05  0.15  0.02  0.00  0.61 -0.02 -0.08 -0.03  0.11  0.11  0.06 -0.05 -0.10 0.53
joy             0.69  0.06  0.00  0.04 -0.01  0.08 -0.06  0.07 -0.08  0.02  0.02  0.02  0.12 0.65
love            0.42  0.21  0.13 -0.17 -0.02  0.17  0.06  0.14  0.09 -0.06 -0.07 -0.11  0.12 0.51
morality        0.04 -0.01 -0.08 -0.02  0.07  0.75 -0.01 -0.03 -0.03  0.06  0.15  0.00 -0.03 0.68
nauseated      -0.11  0.22 -0.17  0.19 -0.08  0.02  0.24  0.15  0.14 -0.02  0.06 -0.01  0.29 0.41
odors          -0.02  0.00 -0.01  0.74 -0.03  0.00  0.03  0.03 -0.03 -0.10  0.06 -0.04  0.02 0.67
pain            0.09 -0.05  0.04  0.25 -0.06  0.05  0.20  0.41  0.02 -0.18  0.06 -0.11  0.21 0.71
personality    -0.10  0.29  0.03  0.01  0.08  0.28 -0.06  0.15 -0.03  0.05  0.10  0.33  0.15 0.52
pleasure        0.63 -0.10 -0.06 -0.05 -0.01  0.07  0.14  0.06  0.01 -0.10  0.14  0.17 -0.12 0.59
pride           0.44  0.26 -0.04 -0.15  0.11  0.08  0.03 -0.05 -0.07  0.04  0.18  0.00  0.06 0.60
reasoning       0.06 -0.16  0.28  0.03 -0.02  0.09  0.14  0.18  0.09  0.23 -0.12  0.27 -0.05 0.37
recognizing     0.02  0.04  0.03  0.16  0.02  0.22  0.07 -0.08  0.14  0.05 -0.07  0.36 -0.08 0.29
remembering    -0.02 -0.02  0.01 -0.16 -0.02  0.11  0.04  0.08  0.14  0.70 -0.01  0.00 -0.01 0.61
safe            0.04 -0.04  0.11  0.04 -0.04  0.11  0.06  0.00  0.04 -0.02  0.80 -0.01 -0.02 0.80
seeing          0.03 -0.22  0.24  0.12  0.08  0.16  0.04 -0.02 -0.09  0.24 -0.20 -0.16 -0.11 0.24
self_aware     -0.19  0.04  0.66 -0.06  0.11  0.00 -0.02  0.00 -0.02  0.00  0.15  0.01  0.00 0.52
self_restraint -0.02 -0.15  0.05 -0.05  0.67  0.16  0.09  0.03 -0.01 -0.15 -0.11  0.07  0.12 0.54
sounds         -0.03 -0.08  0.17  0.40  0.05 -0.13 -0.15 -0.15 -0.04  0.10  0.01  0.17 -0.04 0.28
temperature    -0.01 -0.06  0.05 -0.05  0.02 -0.05 -0.07  0.00  0.81  0.06  0.05  0.00  0.07 0.71
thoughts        0.26 -0.14  0.21  0.06  0.03  0.15 -0.10  0.21  0.02 -0.04  0.20  0.09  0.18 0.46
tired           0.09  0.06  0.03  0.16  0.07  0.04  0.15 -0.04  0.10 -0.06 -0.02 -0.09  0.49 0.45
                 u2 com
angry          0.59 4.2
beliefs        0.57 4.4
calm           0.61 3.3
choices        0.47 3.6
communicating  0.66 4.1
computations   0.26 3.9
conscious      0.43 1.2
depressed      0.36 3.3
depth          0.60 4.1
desires        0.58 5.5
disrespected   0.41 4.6
embarrassed    0.38 1.1
emo_recog      0.54 3.6
fear           0.33 1.5
free_will      0.49 4.0
goal           0.64 1.6
guilt          0.45 1.8
happy          0.31 1.2
hungry         0.20 6.4
intentions     0.47 1.4
joy            0.35 1.2
love           0.49 3.7
morality       0.32 1.1
nauseated      0.59 6.4
odors          0.33 1.1
pain           0.29 3.9
personality    0.48 4.6
pleasure       0.41 1.6
pride          0.40 2.8
reasoning      0.63 6.0
recognizing    0.71 3.0
remembering    0.39 1.3
safe           0.20 1.1
seeing         0.76 7.3
self_aware     0.48 1.4
self_restraint 0.46 1.6
sounds         0.72 3.2
temperature    0.29 1.1
thoughts       0.54 7.2
tired          0.55 1.8

                       MR1  MR7  MR8 MR10 MR11  MR6  MR2  MR5  MR3  MR9  MR4 MR12 MR13
SS loadings           3.29 2.12 1.61 1.47 1.52 1.52 1.59 1.53 1.21 1.34 1.49 1.29 1.31
Proportion Var        0.08 0.05 0.04 0.04 0.04 0.04 0.04 0.04 0.03 0.03 0.04 0.03 0.03
Cumulative Var        0.08 0.14 0.18 0.21 0.25 0.29 0.33 0.37 0.40 0.43 0.47 0.50 0.53
Proportion Explained  0.15 0.10 0.08 0.07 0.07 0.07 0.07 0.07 0.06 0.06 0.07 0.06 0.06
Cumulative Proportion 0.15 0.25 0.33 0.40 0.47 0.54 0.62 0.69 0.74 0.81 0.88 0.94 1.00

 With factor correlations of 
       MR1   MR7  MR8  MR10  MR11   MR6   MR2   MR5   MR3   MR9   MR4  MR12  MR13
MR1   1.00  0.41 0.18 -0.02  0.22  0.30  0.25  0.22 -0.08  0.04  0.35  0.19  0.23
MR7   0.41  1.00 0.09 -0.01  0.19  0.26  0.11  0.16 -0.05  0.03  0.22  0.13  0.18
MR8   0.18  0.09 1.00  0.16  0.26  0.14  0.08  0.14  0.17  0.22  0.26  0.16  0.07
MR10 -0.02 -0.01 0.16  1.00 -0.03 -0.15  0.36  0.24  0.04 -0.16  0.20 -0.12  0.15
MR11  0.22  0.19 0.26 -0.03  1.00  0.29 -0.05  0.22  0.06  0.18  0.21  0.25  0.07
MR6   0.30  0.26 0.14 -0.15  0.29  1.00 -0.02  0.06  0.11  0.11  0.20  0.23  0.07
MR2   0.25  0.11 0.08  0.36 -0.05 -0.02  1.00  0.28 -0.09 -0.26  0.26 -0.12  0.29
MR5   0.22  0.16 0.14  0.24  0.22  0.06  0.28  1.00 -0.07 -0.11  0.28 -0.04  0.20
MR3  -0.08 -0.05 0.17  0.04  0.06  0.11 -0.09 -0.07  1.00  0.21  0.00  0.08 -0.12
MR9   0.04  0.03 0.22 -0.16  0.18  0.11 -0.26 -0.11  0.21  1.00 -0.03  0.30 -0.18
MR4   0.35  0.22 0.26  0.20  0.21  0.20  0.26  0.28  0.00 -0.03  1.00  0.13  0.17
MR12  0.19  0.13 0.16 -0.12  0.25  0.23 -0.12 -0.04  0.08  0.30  0.13  1.00 -0.11
MR13  0.23  0.18 0.07  0.15  0.07  0.07  0.29  0.20 -0.12 -0.18  0.17 -0.11  1.00

Mean item complexity =  3.2
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 338  and the objective function was  1.74 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  157.13  with prob <  1 
The total number of observations was  200  with MLE Chi Square =  306.92  with prob <  0.89 

Tucker Lewis Index of factoring reliability =  1.032
RMSEA index =  0.011  and the 90 % confidence intervals are  NA 0.013
BIC =  -1483.91
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR7  MR8 MR10 MR11  MR6  MR2  MR5  MR3  MR9
Correlation of scores with factors             0.93 0.89 0.87 0.87 0.86 0.87 0.88 0.85 0.87 0.85
Multiple R square of scores with factors       0.86 0.79 0.75 0.76 0.73 0.75 0.77 0.73 0.76 0.73
Minimum correlation of possible factor scores  0.73 0.58 0.51 0.53 0.47 0.51 0.54 0.45 0.53 0.45
                                                MR4 MR12 MR13
Correlation of scores with factors             0.90 0.83 0.83
Multiple R square of scores with factors       0.80 0.69 0.69
Minimum correlation of possible factor scores  0.61 0.37 0.38
efa_child_max_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Small rotated solution

# do factor analysis
efa_child_small_rot <- fa(d3_child, nfactors = efa_child_max_unrot_nfactors, rotate = rot_type, cor = cor_type)
efa_child_small_rot
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = efa_child_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3    h2   u2 com
angry           0.47  0.26  0.06 0.350 0.65 1.6
beliefs         0.48 -0.11  0.19 0.329 0.67 1.4
calm            0.44  0.17  0.13 0.298 0.70 1.5
choices         0.16  0.14  0.38 0.241 0.76 1.6
communicating   0.03 -0.20  0.23 0.099 0.90 2.0
computations    0.11 -0.75  0.26 0.637 0.36 1.3
conscious       0.01  0.16  0.53 0.309 0.69 1.2
depressed       0.64  0.19  0.02 0.505 0.50 1.2
depth          -0.12 -0.01  0.47 0.198 0.80 1.1
desires         0.40  0.28  0.04 0.296 0.70 1.8
disrespected    0.64  0.11  0.08 0.488 0.51 1.1
embarrassed     0.60 -0.02 -0.09 0.329 0.67 1.1
emo_recog       0.36 -0.37  0.23 0.340 0.66 2.7
fear            0.32  0.49  0.11 0.438 0.56 1.8
free_will       0.17  0.23  0.44 0.338 0.66 1.8
goal            0.33 -0.23  0.19 0.218 0.78 2.4
guilt           0.58 -0.01  0.03 0.352 0.65 1.0
happy           0.76 -0.02  0.01 0.582 0.42 1.0
hungry          0.05  0.87  0.03 0.776 0.22 1.0
intentions      0.22 -0.23  0.39 0.297 0.70 2.3
joy             0.77  0.04 -0.07 0.577 0.42 1.0
love            0.64  0.04 -0.03 0.414 0.59 1.0
morality        0.44 -0.24  0.16 0.293 0.71 1.9
nauseated       0.13  0.50 -0.01 0.287 0.71 1.1
odors          -0.20  0.65  0.20 0.425 0.58 1.4
pain            0.13  0.77  0.10 0.664 0.34 1.1
personality     0.44 -0.13  0.28 0.359 0.64 1.9
pleasure        0.63  0.02 -0.01 0.394 0.61 1.0
pride           0.81 -0.12 -0.08 0.602 0.40 1.1
reasoning      -0.02 -0.08  0.51 0.259 0.74 1.1
recognizing     0.10 -0.20  0.31 0.160 0.84 2.0
remembering     0.02 -0.43  0.36 0.317 0.68 1.9
safe            0.30  0.27  0.35 0.380 0.62 2.9
seeing         -0.20 -0.05  0.25 0.072 0.93 2.0
self_aware     -0.06  0.02  0.55 0.288 0.71 1.0
self_restraint  0.18 -0.02  0.28 0.146 0.85 1.8
sounds         -0.28  0.02  0.36 0.139 0.86 1.9
temperature    -0.24 -0.14  0.44 0.211 0.79 1.8
thoughts        0.35  0.18  0.34 0.367 0.63 2.5
tired           0.23  0.44  0.03 0.286 0.71 1.5

                       MR1  MR2  MR3
SS loadings           6.72 4.16 3.18
Proportion Var        0.17 0.10 0.08
Cumulative Var        0.17 0.27 0.35
Proportion Explained  0.48 0.30 0.23
Cumulative Proportion 0.48 0.77 1.00

 With factor correlations of 
     MR1   MR2   MR3
MR1 1.00  0.17  0.34
MR2 0.17  1.00 -0.01
MR3 0.34 -0.01  1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 663  and the objective function was  4.8 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.06 

The harmonic number of observations is  198 with the empirical chi square  808.39  with prob <  8.8e-05 
The total number of observations was  200  with MLE Chi Square =  877.46  with prob <  3.9e-08 

Tucker Lewis Index of factoring reliability =  0.892
RMSEA index =  0.047  and the 90 % confidence intervals are  0.033 0.047
BIC =  -2635.32
Fit based upon off diagonal values = 0.95
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.96 0.95 0.90
Multiple R square of scores with factors       0.92 0.91 0.81
Minimum correlation of possible factor scores  0.85 0.82 0.62
# examine eigenvalues and variance explained
efa_child_small_rot_eigenvalues <- print(efa_child_small_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_child, nfactors = efa_child_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3    h2   u2 com
angry           0.47  0.26  0.06 0.350 0.65 1.6
beliefs         0.48 -0.11  0.19 0.329 0.67 1.4
calm            0.44  0.17  0.13 0.298 0.70 1.5
choices         0.16  0.14  0.38 0.241 0.76 1.6
communicating   0.03 -0.20  0.23 0.099 0.90 2.0
computations    0.11 -0.75  0.26 0.637 0.36 1.3
conscious       0.01  0.16  0.53 0.309 0.69 1.2
depressed       0.64  0.19  0.02 0.505 0.50 1.2
depth          -0.12 -0.01  0.47 0.198 0.80 1.1
desires         0.40  0.28  0.04 0.296 0.70 1.8
disrespected    0.64  0.11  0.08 0.488 0.51 1.1
embarrassed     0.60 -0.02 -0.09 0.329 0.67 1.1
emo_recog       0.36 -0.37  0.23 0.340 0.66 2.7
fear            0.32  0.49  0.11 0.438 0.56 1.8
free_will       0.17  0.23  0.44 0.338 0.66 1.8
goal            0.33 -0.23  0.19 0.218 0.78 2.4
guilt           0.58 -0.01  0.03 0.352 0.65 1.0
happy           0.76 -0.02  0.01 0.582 0.42 1.0
hungry          0.05  0.87  0.03 0.776 0.22 1.0
intentions      0.22 -0.23  0.39 0.297 0.70 2.3
joy             0.77  0.04 -0.07 0.577 0.42 1.0
love            0.64  0.04 -0.03 0.414 0.59 1.0
morality        0.44 -0.24  0.16 0.293 0.71 1.9
nauseated       0.13  0.50 -0.01 0.287 0.71 1.1
odors          -0.20  0.65  0.20 0.425 0.58 1.4
pain            0.13  0.77  0.10 0.664 0.34 1.1
personality     0.44 -0.13  0.28 0.359 0.64 1.9
pleasure        0.63  0.02 -0.01 0.394 0.61 1.0
pride           0.81 -0.12 -0.08 0.602 0.40 1.1
reasoning      -0.02 -0.08  0.51 0.259 0.74 1.1
recognizing     0.10 -0.20  0.31 0.160 0.84 2.0
remembering     0.02 -0.43  0.36 0.317 0.68 1.9
safe            0.30  0.27  0.35 0.380 0.62 2.9
seeing         -0.20 -0.05  0.25 0.072 0.93 2.0
self_aware     -0.06  0.02  0.55 0.288 0.71 1.0
self_restraint  0.18 -0.02  0.28 0.146 0.85 1.8
sounds         -0.28  0.02  0.36 0.139 0.86 1.9
temperature    -0.24 -0.14  0.44 0.211 0.79 1.8
thoughts        0.35  0.18  0.34 0.367 0.63 2.5
tired           0.23  0.44  0.03 0.286 0.71 1.5

                       MR1  MR2  MR3
SS loadings           6.72 4.16 3.18
Proportion Var        0.17 0.10 0.08
Cumulative Var        0.17 0.27 0.35
Proportion Explained  0.48 0.30 0.23
Cumulative Proportion 0.48 0.77 1.00

 With factor correlations of 
     MR1   MR2   MR3
MR1 1.00  0.17  0.34
MR2 0.17  1.00 -0.01
MR3 0.34 -0.01  1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.09 with Chi Square of  3159.59
The degrees of freedom for the model are 663  and the objective function was  4.8 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.06 

The harmonic number of observations is  198 with the empirical chi square  808.39  with prob <  8.8e-05 
The total number of observations was  200  with MLE Chi Square =  877.46  with prob <  3.9e-08 

Tucker Lewis Index of factoring reliability =  0.892
RMSEA index =  0.047  and the 90 % confidence intervals are  0.033 0.047
BIC =  -2635.32
Fit based upon off diagonal values = 0.95
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.96 0.95 0.90
Multiple R square of scores with factors       0.92 0.91 0.81
Minimum correlation of possible factor scores  0.85 0.82 0.62
efa_child_small_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Loadings

# make dataframe for all factor loadings and dominant factor
efa_child_small_rot_loadings <- efa_child_small_rot$loadings[] %>%
  fa.sort() %>%
  data.frame() %>%
  rownames_to_column(var = "capacity") %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA)))) %>%
  select(capacity, F1, F2, F3, factor, factorName, loading, loading_abs) %>%
  distinct() %>%
  full_join(d %>% select(capacity, capWording)) %>%
  mutate(capWording = gsub("\\ ", "_", gsub(" --.*", "", capWording))) %>%
  select(capacity, capWording, F1:loading_abs) %>%
  distinct()
Joining, by = "capacity"
joining factor and character vector, coercing into character vector
# print out list of items by dominant factor
efa_child_small_rot_items <- efa_child_small_rot_loadings %>%
  arrange(factor, desc(loading_abs)) %>%
  mutate(capWordingPlus = ifelse(loading > 0, capWording, 
                                 paste0(capWording, " (negative loading)"))) %>%
  group_by(factor) %>%
  summarise(items = gsub("_", " ", paste(capWordingPlus, collapse = ", ")))
head(efa_child_small_rot_items$items, 40)
[1] "feel proud, feel joy, feel happy, feel sad, feel love, get hurt feelings, feel pleasure, feel embarrassed, feel guilty, have beliefs, get angry, know what's nice and what's mean, have a personality, feel calm, have desires, have thoughts, have goals"                                            
[2] "get hungry, feel pain, do math (negative loading), smell things, feel sick, feel scared, feel tired, remember things (negative loading), understand how somebody else is feeling (negative loading)"                                                                                                  
[3] "be aware of itself, be aware of things, figure out how to do things, sense whether something is close by or far away, decide what to do, sense temperatures, make plans, make choices, hear sounds, feel safe, recognize somebody else, have self-control, see things, communicate with somebody else"

Combined dataset: Children & adults

Exploratory factor analysis

Maximal (13-factor) unrotated solution

# do factor analysis
efa_comb_max_unrot <- fa(d3_combined, nfactors = 13, rotate = "none", cor = cor_type)
efa_comb_max_unrot
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.73  0.04 -0.06 -0.12  0.07  0.03  0.11  0.00  0.13 -0.18 -0.07  0.07  0.04 0.63
beliefs         0.58  0.36  0.01 -0.13  0.12 -0.10  0.02  0.11 -0.12  0.12  0.03 -0.02 -0.07 0.55
calm            0.70 -0.02  0.04  0.04 -0.09 -0.05  0.01  0.03 -0.03 -0.08  0.08  0.08 -0.02 0.53
choices         0.30  0.15  0.42 -0.30 -0.02  0.15 -0.13  0.04  0.04 -0.01  0.02  0.02 -0.05 0.42
communicating   0.07  0.42  0.29  0.19 -0.12  0.32  0.21 -0.02  0.14 -0.03  0.00 -0.11  0.01 0.50
computations   -0.29  0.82  0.13  0.08  0.10  0.02 -0.04  0.06 -0.02 -0.11  0.09  0.10 -0.08 0.83
conscious       0.23 -0.02  0.52  0.00  0.01 -0.10  0.04 -0.31  0.02  0.00  0.14 -0.06 -0.02 0.46
depressed       0.78  0.13 -0.13  0.06 -0.09  0.05 -0.05  0.02  0.14 -0.06 -0.02  0.04 -0.07 0.69
depth          -0.08  0.08  0.52  0.17  0.30 -0.04 -0.14 -0.10 -0.09 -0.03 -0.03 -0.05  0.12 0.46
desires         0.67 -0.09  0.04 -0.09  0.06  0.20  0.13  0.06 -0.29  0.24  0.06  0.09  0.02 0.68
disrespected    0.75  0.19 -0.15 -0.06  0.04 -0.02 -0.09 -0.11  0.13  0.07  0.04 -0.07  0.05 0.68
embarrassed     0.59  0.23 -0.22 -0.05  0.39  0.10  0.13 -0.11  0.07 -0.03 -0.03 -0.04 -0.11 0.67
emo_recog       0.38  0.46  0.07  0.05  0.02 -0.25  0.07  0.00  0.06  0.11 -0.03 -0.12 -0.03 0.46
fear            0.71 -0.32  0.11  0.10 -0.07  0.04  0.19  0.04 -0.04 -0.14 -0.12 -0.01  0.04 0.71
free_will       0.30  0.09  0.46 -0.43 -0.04  0.20 -0.23 -0.03 -0.08 -0.13 -0.09 -0.04  0.00 0.63
goal            0.40  0.26  0.18 -0.07 -0.04 -0.04  0.12  0.11 -0.14  0.03  0.02  0.15  0.03 0.34
guilt           0.67  0.25 -0.16 -0.01  0.32  0.01  0.01 -0.12 -0.08 -0.04 -0.06 -0.01  0.11 0.67
happy           0.82  0.21 -0.14  0.10 -0.16  0.04 -0.07 -0.10 -0.03 -0.06  0.03 -0.01 -0.05 0.79
hungry          0.53 -0.72  0.12  0.01  0.10  0.01 -0.09  0.02  0.01  0.02 -0.02  0.01 -0.06 0.84
intentions      0.21  0.49  0.26 -0.18  0.03 -0.02 -0.04  0.04  0.05  0.03 -0.05  0.14  0.17 0.44
joy             0.80  0.19 -0.19  0.12 -0.11  0.09 -0.11 -0.01 -0.04  0.05  0.13 -0.03  0.01 0.79
love            0.73  0.19 -0.12  0.10  0.03 -0.03 -0.14 -0.08  0.02  0.15 -0.05 -0.03 -0.03 0.65
morality        0.41  0.46  0.04  0.04  0.01 -0.23 -0.04  0.22  0.04  0.03 -0.12 -0.12  0.15 0.54
nauseated       0.46 -0.38  0.15  0.16  0.13  0.11  0.00  0.15  0.03  0.05 -0.08  0.05 -0.10 0.48
odors           0.26 -0.53  0.35  0.06  0.16  0.03  0.02  0.03  0.05 -0.09  0.25 -0.13  0.09 0.60
pain            0.60 -0.54  0.15  0.00  0.03  0.05 -0.03  0.10  0.10  0.03  0.01 -0.01  0.03 0.71
personality     0.57  0.39  0.03 -0.12  0.14 -0.13  0.08  0.24  0.03  0.03  0.05 -0.12 -0.13 0.62
pleasure        0.71  0.02 -0.05  0.18 -0.13  0.00 -0.10  0.07 -0.15 -0.03  0.05 -0.06  0.05 0.60
pride           0.76  0.32 -0.23  0.01  0.00 -0.01  0.01 -0.06 -0.03 -0.06 -0.06  0.08  0.08 0.77
reasoning       0.21  0.26  0.47 -0.07 -0.13  0.09  0.04 -0.04  0.00 -0.02 -0.01 -0.09 -0.06 0.38
recognizing     0.01  0.49  0.33  0.15  0.03  0.16  0.09  0.18  0.02  0.00  0.08 -0.10  0.08 0.46
remembering     0.01  0.54  0.35  0.12 -0.13  0.16  0.05 -0.03  0.03  0.18 -0.28 -0.07 -0.05 0.59
safe            0.68 -0.17  0.26  0.01 -0.11 -0.25  0.10 -0.01 -0.19 -0.15 -0.06 -0.04 -0.06 0.72
seeing          0.12  0.03  0.38  0.11 -0.04  0.03  0.06 -0.05  0.06  0.13 -0.01  0.07  0.08 0.22
self_aware      0.39  0.13  0.37 -0.17 -0.10 -0.20  0.23 -0.25  0.09  0.17  0.09  0.08 -0.01 0.55
self_restraint  0.44  0.27  0.13 -0.16 -0.06 -0.13 -0.11  0.18  0.21  0.05  0.05  0.09  0.09 0.44
sounds         -0.02  0.03  0.42  0.17  0.00  0.08  0.16 -0.02  0.01 -0.04  0.14  0.10  0.05 0.27
temperature    -0.20  0.05  0.53  0.35  0.14 -0.15 -0.24 -0.06 -0.05  0.04 -0.10  0.10 -0.04 0.57
thoughts        0.62  0.13  0.20 -0.14 -0.16 -0.10 -0.06  0.03  0.09  0.04  0.06  0.02 -0.03 0.51
tired           0.64 -0.29  0.11  0.16  0.03  0.00  0.06  0.06  0.19  0.02 -0.01  0.18 -0.02 0.61
                 u2 com
angry          0.37 1.4
beliefs        0.45 2.3
calm           0.47 1.1
choices        0.58 3.7
communicating  0.50 4.7
computations   0.17 1.5
conscious      0.54 2.4
depressed      0.31 1.3
depth          0.54 2.5
desires        0.32 2.2
disrespected   0.32 1.5
embarrassed    0.33 2.9
emo_recog      0.54 3.1
fear           0.29 1.9
free_will      0.37 4.3
goal           0.66 3.6
guilt          0.33 2.1
happy          0.21 1.4
hungry         0.16 2.0
intentions     0.56 3.0
joy            0.21 1.5
love           0.35 1.5
morality       0.46 3.8
nauseated      0.52 3.4
odors          0.40 3.5
pain           0.29 2.3
personality    0.38 3.0
pleasure       0.40 1.4
pride          0.23 1.7
reasoning      0.62 2.5
recognizing    0.54 3.0
remembering    0.41 3.2
safe           0.28 2.2
seeing         0.78 2.1
self_aware     0.45 5.8
self_restraint 0.56 4.1
sounds         0.73 2.2
temperature    0.43 3.2
thoughts       0.49 1.8
tired          0.39 2.1

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           11.01 4.45 2.92 0.86 0.65 0.63 0.49 0.49 0.41 0.34 0.33 0.28 0.21
Proportion Var         0.28 0.11 0.07 0.02 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.28 0.39 0.46 0.48 0.50 0.51 0.53 0.54 0.55 0.56 0.56 0.57 0.58
Proportion Explained   0.48 0.19 0.13 0.04 0.03 0.03 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Proportion  0.48 0.67 0.80 0.83 0.86 0.89 0.91 0.93 0.95 0.96 0.98 0.99 1.00

Mean item complexity =  2.6
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9  MR10
Correlation of scores with factors             0.99 0.97 0.93 0.82 0.81 0.77 0.75 0.73 0.72  0.70
Multiple R square of scores with factors       0.97 0.94 0.87 0.67 0.65 0.60 0.56 0.53 0.52  0.49
Minimum correlation of possible factor scores  0.94 0.88 0.73 0.34 0.30 0.20 0.12 0.06 0.05 -0.02
                                                MR11  MR12  MR13
Correlation of scores with factors              0.68  0.63  0.59
Multiple R square of scores with factors        0.46  0.39  0.35
Minimum correlation of possible factor scores  -0.08 -0.21 -0.31
# examine eigenvalues and variance explained
efa_comb_max_unrot_eigenvalues <- print(efa_comb_max_unrot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = "none", cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.73  0.04 -0.06 -0.12  0.07  0.03  0.11  0.00  0.13 -0.18 -0.07  0.07  0.04 0.63
beliefs         0.58  0.36  0.01 -0.13  0.12 -0.10  0.02  0.11 -0.12  0.12  0.03 -0.02 -0.07 0.55
calm            0.70 -0.02  0.04  0.04 -0.09 -0.05  0.01  0.03 -0.03 -0.08  0.08  0.08 -0.02 0.53
choices         0.30  0.15  0.42 -0.30 -0.02  0.15 -0.13  0.04  0.04 -0.01  0.02  0.02 -0.05 0.42
communicating   0.07  0.42  0.29  0.19 -0.12  0.32  0.21 -0.02  0.14 -0.03  0.00 -0.11  0.01 0.50
computations   -0.29  0.82  0.13  0.08  0.10  0.02 -0.04  0.06 -0.02 -0.11  0.09  0.10 -0.08 0.83
conscious       0.23 -0.02  0.52  0.00  0.01 -0.10  0.04 -0.31  0.02  0.00  0.14 -0.06 -0.02 0.46
depressed       0.78  0.13 -0.13  0.06 -0.09  0.05 -0.05  0.02  0.14 -0.06 -0.02  0.04 -0.07 0.69
depth          -0.08  0.08  0.52  0.17  0.30 -0.04 -0.14 -0.10 -0.09 -0.03 -0.03 -0.05  0.12 0.46
desires         0.67 -0.09  0.04 -0.09  0.06  0.20  0.13  0.06 -0.29  0.24  0.06  0.09  0.02 0.68
disrespected    0.75  0.19 -0.15 -0.06  0.04 -0.02 -0.09 -0.11  0.13  0.07  0.04 -0.07  0.05 0.68
embarrassed     0.59  0.23 -0.22 -0.05  0.39  0.10  0.13 -0.11  0.07 -0.03 -0.03 -0.04 -0.11 0.67
emo_recog       0.38  0.46  0.07  0.05  0.02 -0.25  0.07  0.00  0.06  0.11 -0.03 -0.12 -0.03 0.46
fear            0.71 -0.32  0.11  0.10 -0.07  0.04  0.19  0.04 -0.04 -0.14 -0.12 -0.01  0.04 0.71
free_will       0.30  0.09  0.46 -0.43 -0.04  0.20 -0.23 -0.03 -0.08 -0.13 -0.09 -0.04  0.00 0.63
goal            0.40  0.26  0.18 -0.07 -0.04 -0.04  0.12  0.11 -0.14  0.03  0.02  0.15  0.03 0.34
guilt           0.67  0.25 -0.16 -0.01  0.32  0.01  0.01 -0.12 -0.08 -0.04 -0.06 -0.01  0.11 0.67
happy           0.82  0.21 -0.14  0.10 -0.16  0.04 -0.07 -0.10 -0.03 -0.06  0.03 -0.01 -0.05 0.79
hungry          0.53 -0.72  0.12  0.01  0.10  0.01 -0.09  0.02  0.01  0.02 -0.02  0.01 -0.06 0.84
intentions      0.21  0.49  0.26 -0.18  0.03 -0.02 -0.04  0.04  0.05  0.03 -0.05  0.14  0.17 0.44
joy             0.80  0.19 -0.19  0.12 -0.11  0.09 -0.11 -0.01 -0.04  0.05  0.13 -0.03  0.01 0.79
love            0.73  0.19 -0.12  0.10  0.03 -0.03 -0.14 -0.08  0.02  0.15 -0.05 -0.03 -0.03 0.65
morality        0.41  0.46  0.04  0.04  0.01 -0.23 -0.04  0.22  0.04  0.03 -0.12 -0.12  0.15 0.54
nauseated       0.46 -0.38  0.15  0.16  0.13  0.11  0.00  0.15  0.03  0.05 -0.08  0.05 -0.10 0.48
odors           0.26 -0.53  0.35  0.06  0.16  0.03  0.02  0.03  0.05 -0.09  0.25 -0.13  0.09 0.60
pain            0.60 -0.54  0.15  0.00  0.03  0.05 -0.03  0.10  0.10  0.03  0.01 -0.01  0.03 0.71
personality     0.57  0.39  0.03 -0.12  0.14 -0.13  0.08  0.24  0.03  0.03  0.05 -0.12 -0.13 0.62
pleasure        0.71  0.02 -0.05  0.18 -0.13  0.00 -0.10  0.07 -0.15 -0.03  0.05 -0.06  0.05 0.60
pride           0.76  0.32 -0.23  0.01  0.00 -0.01  0.01 -0.06 -0.03 -0.06 -0.06  0.08  0.08 0.77
reasoning       0.21  0.26  0.47 -0.07 -0.13  0.09  0.04 -0.04  0.00 -0.02 -0.01 -0.09 -0.06 0.38
recognizing     0.01  0.49  0.33  0.15  0.03  0.16  0.09  0.18  0.02  0.00  0.08 -0.10  0.08 0.46
remembering     0.01  0.54  0.35  0.12 -0.13  0.16  0.05 -0.03  0.03  0.18 -0.28 -0.07 -0.05 0.59
safe            0.68 -0.17  0.26  0.01 -0.11 -0.25  0.10 -0.01 -0.19 -0.15 -0.06 -0.04 -0.06 0.72
seeing          0.12  0.03  0.38  0.11 -0.04  0.03  0.06 -0.05  0.06  0.13 -0.01  0.07  0.08 0.22
self_aware      0.39  0.13  0.37 -0.17 -0.10 -0.20  0.23 -0.25  0.09  0.17  0.09  0.08 -0.01 0.55
self_restraint  0.44  0.27  0.13 -0.16 -0.06 -0.13 -0.11  0.18  0.21  0.05  0.05  0.09  0.09 0.44
sounds         -0.02  0.03  0.42  0.17  0.00  0.08  0.16 -0.02  0.01 -0.04  0.14  0.10  0.05 0.27
temperature    -0.20  0.05  0.53  0.35  0.14 -0.15 -0.24 -0.06 -0.05  0.04 -0.10  0.10 -0.04 0.57
thoughts        0.62  0.13  0.20 -0.14 -0.16 -0.10 -0.06  0.03  0.09  0.04  0.06  0.02 -0.03 0.51
tired           0.64 -0.29  0.11  0.16  0.03  0.00  0.06  0.06  0.19  0.02 -0.01  0.18 -0.02 0.61
                 u2 com
angry          0.37 1.4
beliefs        0.45 2.3
calm           0.47 1.1
choices        0.58 3.7
communicating  0.50 4.7
computations   0.17 1.5
conscious      0.54 2.4
depressed      0.31 1.3
depth          0.54 2.5
desires        0.32 2.2
disrespected   0.32 1.5
embarrassed    0.33 2.9
emo_recog      0.54 3.1
fear           0.29 1.9
free_will      0.37 4.3
goal           0.66 3.6
guilt          0.33 2.1
happy          0.21 1.4
hungry         0.16 2.0
intentions     0.56 3.0
joy            0.21 1.5
love           0.35 1.5
morality       0.46 3.8
nauseated      0.52 3.4
odors          0.40 3.5
pain           0.29 2.3
personality    0.38 3.0
pleasure       0.40 1.4
pride          0.23 1.7
reasoning      0.62 2.5
recognizing    0.54 3.0
remembering    0.41 3.2
safe           0.28 2.2
seeing         0.78 2.1
self_aware     0.45 5.8
self_restraint 0.56 4.1
sounds         0.73 2.2
temperature    0.43 3.2
thoughts       0.49 1.8
tired          0.39 2.1

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           11.01 4.45 2.92 0.86 0.65 0.63 0.49 0.49 0.41 0.34 0.33 0.28 0.21
Proportion Var         0.28 0.11 0.07 0.02 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.28 0.39 0.46 0.48 0.50 0.51 0.53 0.54 0.55 0.56 0.56 0.57 0.58
Proportion Explained   0.48 0.19 0.13 0.04 0.03 0.03 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Proportion  0.48 0.67 0.80 0.83 0.86 0.89 0.91 0.93 0.95 0.96 0.98 0.99 1.00

Mean item complexity =  2.6
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9  MR10
Correlation of scores with factors             0.99 0.97 0.93 0.82 0.81 0.77 0.75 0.73 0.72  0.70
Multiple R square of scores with factors       0.97 0.94 0.87 0.67 0.65 0.60 0.56 0.53 0.52  0.49
Minimum correlation of possible factor scores  0.94 0.88 0.73 0.34 0.30 0.20 0.12 0.06 0.05 -0.02
                                                MR11  MR12  MR13
Correlation of scores with factors              0.68  0.63  0.59
Multiple R square of scores with factors        0.46  0.39  0.35
Minimum correlation of possible factor scores  -0.08 -0.21 -0.31
# count factors with eigenvalues > 1 and variance explained > 5%
efa_comb_max_unrot_nfactors <- efa_comb_max_unrot_eigenvalues %>%
  filter(SS.loadings > 1, Proportion.Explained > 0.05) %>%
  count() %>%
  as.numeric()
efa_comb_max_unrot_nfactors
[1] 3
# manually check that each factor is the dominant factor for at least one mental capacity item
efa_comb_max_unrot_loadings <- fa.sort(loadings(efa_comb_max_unrot)[]) %>%
  data.frame() %>%
  select(1:efa_comb_max_unrot_nfactors) %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA))))
efa_comb_max_unrot_loadings %>% count(factorName) # drop any factors where n < 1

Maximal (13-factor) rotated solution

# do factor analysis
efa_comb_max_rot <- fa(d3_combined, nfactors = 13, rotate = rot_type, cor = cor_type)
efa_comb_max_rot
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR4   MR5   MR6   MR3   MR7   MR8  MR10  MR12   MR2   MR9  MR11  MR13   h2
angry           0.06  0.15  0.36  0.01 -0.18  0.05 -0.02  0.23  0.22  0.00 -0.03  0.02  0.18 0.63
beliefs         0.11  0.08  0.15 -0.07  0.00  0.08  0.35  0.02 -0.05  0.11  0.26 -0.07  0.06 0.55
calm            0.35  0.04  0.00 -0.07 -0.03  0.09  0.04  0.22  0.16  0.09  0.11  0.07  0.05 0.53
choices        -0.01  0.55 -0.03  0.05  0.00  0.08  0.07 -0.08  0.10  0.06  0.06  0.03  0.00 0.42
communicating   0.09  0.02  0.04  0.68 -0.06  0.05 -0.05  0.00  0.03  0.08 -0.04  0.05 -0.01 0.50
computations    0.03  0.04  0.08  0.15  0.18 -0.05  0.12 -0.13 -0.08  0.59 -0.10 -0.13  0.04 0.83
conscious       0.08  0.12  0.04  0.07  0.21  0.47 -0.06  0.08 -0.09 -0.01 -0.07  0.20 -0.12 0.46
depressed       0.49  0.07  0.14  0.05 -0.10  0.01  0.06  0.10  0.26  0.00 -0.05 -0.05  0.05 0.69
depth          -0.13  0.11  0.14  0.06  0.55  0.01 -0.02  0.00 -0.13  0.01 -0.01  0.19  0.08 0.46
desires         0.10  0.06  0.07  0.00 -0.07  0.05  0.00  0.01  0.00 -0.04  0.69  0.00 -0.02 0.68
disrespected    0.46  0.07  0.25 -0.03 -0.08  0.14  0.10 -0.11  0.02 -0.15 -0.02  0.03  0.13 0.68
embarrassed     0.02 -0.01  0.71  0.03 -0.07  0.02  0.13 -0.02  0.07  0.04  0.07  0.00 -0.07 0.67
emo_recog       0.12 -0.12  0.11  0.10  0.07  0.24  0.38  0.07 -0.08 -0.01 -0.06 -0.09  0.11 0.46
fear            0.06  0.02  0.10  0.13 -0.07  0.00 -0.06  0.47  0.19 -0.19  0.13  0.09  0.06 0.71
free_will      -0.01  0.81  0.00  0.00  0.01 -0.04 -0.04  0.04 -0.06 -0.02  0.01  0.00  0.00 0.63
goal           -0.03  0.07 -0.04  0.02 -0.01  0.13  0.08  0.16  0.04  0.21  0.30 -0.09  0.16 0.34
guilt           0.18  0.01  0.56 -0.06  0.08 -0.01  0.01  0.05 -0.10 -0.01  0.14  0.01  0.18 0.67
happy           0.70  0.06  0.10  0.04 -0.05  0.05 -0.01  0.15  0.04  0.04  0.01 -0.06 -0.01 0.79
hungry          0.05  0.11  0.05 -0.22  0.11 -0.02 -0.02  0.13  0.30 -0.33  0.14  0.21 -0.13 0.84
intentions     -0.08  0.24  0.04  0.06  0.07  0.14  0.02 -0.09  0.01  0.15  0.07 -0.11  0.37 0.44
joy             0.75  0.00  0.02  0.04 -0.07 -0.01  0.05 -0.03  0.01  0.02  0.15  0.05  0.03 0.79
love            0.53 -0.01  0.18 -0.03  0.12  0.07  0.12 -0.07  0.06 -0.15  0.09 -0.11  0.04 0.65
morality        0.08 -0.03  0.01  0.10  0.07 -0.05  0.40  0.12 -0.06 -0.07 -0.05 -0.05  0.38 0.54
nauseated      -0.01  0.01  0.09  0.04  0.16 -0.13  0.07  0.11  0.38 -0.16  0.20  0.10 -0.09 0.48
odors          -0.02  0.05  0.00  0.01  0.08  0.06  0.01  0.05  0.07 -0.13  0.03  0.62 -0.05 0.60
pain            0.08  0.10 -0.01 -0.05  0.00  0.00  0.03  0.09  0.32 -0.31  0.12  0.26  0.02 0.71
personality     0.00  0.07  0.19  0.03 -0.10  0.04  0.56  0.08  0.06  0.12  0.07  0.04  0.03 0.62
pleasure        0.59 -0.01 -0.08  0.02  0.04 -0.09  0.06  0.21 -0.03 -0.03  0.14  0.09  0.07 0.60
pride           0.40  0.00  0.29 -0.03 -0.07  0.04 -0.03  0.15  0.02  0.06  0.09 -0.14  0.22 0.77
reasoning       0.03  0.30 -0.08  0.30  0.05  0.17  0.08  0.10 -0.04  0.04 -0.01  0.01 -0.06 0.38
recognizing    -0.01  0.03 -0.05  0.46  0.07 -0.07  0.17 -0.05 -0.05  0.20  0.08  0.16  0.13 0.46
remembering    -0.01  0.12 -0.03  0.53  0.17  0.05  0.09 -0.03 -0.02 -0.09  0.04 -0.35  0.02 0.59
safe            0.09  0.09 -0.03 -0.10  0.07  0.17  0.14  0.60  0.00 -0.05  0.07  0.04 -0.02 0.72
seeing         -0.03 -0.02 -0.10  0.21  0.18  0.22 -0.08 -0.03  0.11 -0.06  0.12  0.03  0.10 0.22
self_aware     -0.07  0.01  0.00  0.02 -0.04  0.69  0.04  0.05  0.02 -0.02  0.09 -0.03  0.05 0.55
self_restraint  0.13  0.17 -0.10 -0.06 -0.05  0.13  0.23 -0.11  0.21  0.06 -0.04  0.03  0.33 0.44
sounds         -0.09 -0.06 -0.07  0.24  0.15  0.18 -0.14  0.06  0.10  0.21  0.10  0.20  0.02 0.27
temperature     0.00 -0.01 -0.10 -0.01  0.72  0.03 -0.02  0.02  0.10  0.08 -0.07 -0.04 -0.02 0.57
thoughts        0.28  0.22 -0.11 -0.03 -0.05  0.24  0.18  0.05  0.13 -0.01  0.01  0.02  0.09 0.51
tired           0.13 -0.10  0.08  0.00  0.08  0.11 -0.03  0.11  0.49 -0.09  0.10  0.10  0.08 0.61
                 u2 com
angry          0.37 4.4
beliefs        0.45 3.4
calm           0.47 3.2
choices        0.58 1.3
communicating  0.50 1.1
computations   0.17 1.9
conscious      0.54 2.6
depressed      0.31 2.1
depth          0.54 1.9
desires        0.32 1.1
disrespected   0.32 2.8
embarrassed    0.33 1.2
emo_recog      0.54 3.4
fear           0.29 2.5
free_will      0.37 1.0
goal           0.66 4.3
guilt          0.33 1.8
happy          0.21 1.2
hungry         0.16 5.5
intentions     0.56 3.3
joy            0.21 1.1
love           0.35 2.0
morality       0.46 2.7
nauseated      0.52 3.5
odors          0.40 1.2
pain           0.29 3.9
personality    0.38 1.6
pleasure       0.40 1.6
pride          0.23 3.4
reasoning      0.62 3.4
recognizing    0.54 2.5
remembering    0.41 2.3
safe           0.28 1.5
seeing         0.78 5.7
self_aware     0.45 1.1
self_restraint 0.56 5.1
sounds         0.73 7.2
temperature    0.43 1.1
thoughts       0.49 5.0
tired          0.39 1.9

                       MR1  MR4  MR5  MR6  MR3  MR7  MR8 MR10 MR12  MR2  MR9 MR11 MR13
SS loadings           4.04 1.76 2.04 1.64 1.37 1.59 1.69 1.72 1.62 1.44 1.61 1.28 1.26
Proportion Var        0.10 0.04 0.05 0.04 0.03 0.04 0.04 0.04 0.04 0.04 0.04 0.03 0.03
Cumulative Var        0.10 0.15 0.20 0.24 0.27 0.31 0.35 0.40 0.44 0.47 0.51 0.55 0.58
Proportion Explained  0.18 0.08 0.09 0.07 0.06 0.07 0.07 0.07 0.07 0.06 0.07 0.06 0.05
Cumulative Proportion 0.18 0.25 0.34 0.41 0.47 0.54 0.61 0.69 0.76 0.82 0.89 0.95 1.00

 With factor correlations of 
       MR1   MR4   MR5   MR6   MR3  MR7   MR8  MR10  MR12   MR2   MR9  MR11  MR13
MR1   1.00  0.23  0.56  0.03 -0.21 0.27  0.43  0.45  0.35 -0.14  0.48 -0.03  0.41
MR4   0.23  1.00  0.16  0.21  0.14 0.43  0.26  0.23  0.17 -0.01  0.31  0.12  0.24
MR5   0.56  0.16  1.00  0.01 -0.19 0.17  0.35  0.22  0.18 -0.04  0.37 -0.03  0.32
MR6   0.03  0.21  0.01  1.00  0.29 0.21  0.19 -0.07 -0.11  0.38 -0.01 -0.17  0.19
MR3  -0.21  0.14 -0.19  0.29  1.00 0.15  0.01 -0.02 -0.09  0.09 -0.08  0.13 -0.02
MR7   0.27  0.43  0.17  0.21  0.15 1.00  0.28  0.29  0.18  0.00  0.24  0.08  0.23
MR8   0.43  0.26  0.35  0.19  0.01 0.28  1.00  0.14  0.07  0.17  0.24 -0.17  0.47
MR10  0.45  0.23  0.22 -0.07 -0.02 0.29  0.14  1.00  0.40 -0.32  0.44  0.30  0.13
MR12  0.35  0.17  0.18 -0.11 -0.09 0.18  0.07  0.40  1.00 -0.40  0.37  0.33  0.06
MR2  -0.14 -0.01 -0.04  0.38  0.09 0.00  0.17 -0.32 -0.40  1.00 -0.25 -0.33  0.21
MR9   0.48  0.31  0.37 -0.01 -0.08 0.24  0.24  0.44  0.37 -0.25  1.00  0.23  0.17
MR11 -0.03  0.12 -0.03 -0.17  0.13 0.08 -0.17  0.30  0.33 -0.33  0.23  1.00 -0.19
MR13  0.41  0.24  0.32  0.19 -0.02 0.23  0.47  0.13  0.06  0.21  0.17 -0.19  1.00

Mean item complexity =  2.7
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR4  MR5  MR6  MR3  MR7  MR8 MR10 MR12  MR2
Correlation of scores with factors             0.95 0.88 0.90 0.87 0.86 0.85 0.85 0.88 0.85 0.89
Multiple R square of scores with factors       0.91 0.78 0.81 0.76 0.75 0.72 0.73 0.77 0.73 0.78
Minimum correlation of possible factor scores  0.82 0.55 0.61 0.52 0.49 0.45 0.46 0.54 0.45 0.57
                                                MR9 MR11 MR13
Correlation of scores with factors             0.86 0.85 0.81
Multiple R square of scores with factors       0.75 0.72 0.66
Minimum correlation of possible factor scores  0.49 0.44 0.31
# examine eigenvalues and variance explained
efa_comb_max_rot_eigenvalues <- print(efa_comb_max_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = 13, rotate = rot_type, cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR4   MR5   MR6   MR3   MR7   MR8  MR10  MR12   MR2   MR9  MR11  MR13   h2
angry           0.06  0.15  0.36  0.01 -0.18  0.05 -0.02  0.23  0.22  0.00 -0.03  0.02  0.18 0.63
beliefs         0.11  0.08  0.15 -0.07  0.00  0.08  0.35  0.02 -0.05  0.11  0.26 -0.07  0.06 0.55
calm            0.35  0.04  0.00 -0.07 -0.03  0.09  0.04  0.22  0.16  0.09  0.11  0.07  0.05 0.53
choices        -0.01  0.55 -0.03  0.05  0.00  0.08  0.07 -0.08  0.10  0.06  0.06  0.03  0.00 0.42
communicating   0.09  0.02  0.04  0.68 -0.06  0.05 -0.05  0.00  0.03  0.08 -0.04  0.05 -0.01 0.50
computations    0.03  0.04  0.08  0.15  0.18 -0.05  0.12 -0.13 -0.08  0.59 -0.10 -0.13  0.04 0.83
conscious       0.08  0.12  0.04  0.07  0.21  0.47 -0.06  0.08 -0.09 -0.01 -0.07  0.20 -0.12 0.46
depressed       0.49  0.07  0.14  0.05 -0.10  0.01  0.06  0.10  0.26  0.00 -0.05 -0.05  0.05 0.69
depth          -0.13  0.11  0.14  0.06  0.55  0.01 -0.02  0.00 -0.13  0.01 -0.01  0.19  0.08 0.46
desires         0.10  0.06  0.07  0.00 -0.07  0.05  0.00  0.01  0.00 -0.04  0.69  0.00 -0.02 0.68
disrespected    0.46  0.07  0.25 -0.03 -0.08  0.14  0.10 -0.11  0.02 -0.15 -0.02  0.03  0.13 0.68
embarrassed     0.02 -0.01  0.71  0.03 -0.07  0.02  0.13 -0.02  0.07  0.04  0.07  0.00 -0.07 0.67
emo_recog       0.12 -0.12  0.11  0.10  0.07  0.24  0.38  0.07 -0.08 -0.01 -0.06 -0.09  0.11 0.46
fear            0.06  0.02  0.10  0.13 -0.07  0.00 -0.06  0.47  0.19 -0.19  0.13  0.09  0.06 0.71
free_will      -0.01  0.81  0.00  0.00  0.01 -0.04 -0.04  0.04 -0.06 -0.02  0.01  0.00  0.00 0.63
goal           -0.03  0.07 -0.04  0.02 -0.01  0.13  0.08  0.16  0.04  0.21  0.30 -0.09  0.16 0.34
guilt           0.18  0.01  0.56 -0.06  0.08 -0.01  0.01  0.05 -0.10 -0.01  0.14  0.01  0.18 0.67
happy           0.70  0.06  0.10  0.04 -0.05  0.05 -0.01  0.15  0.04  0.04  0.01 -0.06 -0.01 0.79
hungry          0.05  0.11  0.05 -0.22  0.11 -0.02 -0.02  0.13  0.30 -0.33  0.14  0.21 -0.13 0.84
intentions     -0.08  0.24  0.04  0.06  0.07  0.14  0.02 -0.09  0.01  0.15  0.07 -0.11  0.37 0.44
joy             0.75  0.00  0.02  0.04 -0.07 -0.01  0.05 -0.03  0.01  0.02  0.15  0.05  0.03 0.79
love            0.53 -0.01  0.18 -0.03  0.12  0.07  0.12 -0.07  0.06 -0.15  0.09 -0.11  0.04 0.65
morality        0.08 -0.03  0.01  0.10  0.07 -0.05  0.40  0.12 -0.06 -0.07 -0.05 -0.05  0.38 0.54
nauseated      -0.01  0.01  0.09  0.04  0.16 -0.13  0.07  0.11  0.38 -0.16  0.20  0.10 -0.09 0.48
odors          -0.02  0.05  0.00  0.01  0.08  0.06  0.01  0.05  0.07 -0.13  0.03  0.62 -0.05 0.60
pain            0.08  0.10 -0.01 -0.05  0.00  0.00  0.03  0.09  0.32 -0.31  0.12  0.26  0.02 0.71
personality     0.00  0.07  0.19  0.03 -0.10  0.04  0.56  0.08  0.06  0.12  0.07  0.04  0.03 0.62
pleasure        0.59 -0.01 -0.08  0.02  0.04 -0.09  0.06  0.21 -0.03 -0.03  0.14  0.09  0.07 0.60
pride           0.40  0.00  0.29 -0.03 -0.07  0.04 -0.03  0.15  0.02  0.06  0.09 -0.14  0.22 0.77
reasoning       0.03  0.30 -0.08  0.30  0.05  0.17  0.08  0.10 -0.04  0.04 -0.01  0.01 -0.06 0.38
recognizing    -0.01  0.03 -0.05  0.46  0.07 -0.07  0.17 -0.05 -0.05  0.20  0.08  0.16  0.13 0.46
remembering    -0.01  0.12 -0.03  0.53  0.17  0.05  0.09 -0.03 -0.02 -0.09  0.04 -0.35  0.02 0.59
safe            0.09  0.09 -0.03 -0.10  0.07  0.17  0.14  0.60  0.00 -0.05  0.07  0.04 -0.02 0.72
seeing         -0.03 -0.02 -0.10  0.21  0.18  0.22 -0.08 -0.03  0.11 -0.06  0.12  0.03  0.10 0.22
self_aware     -0.07  0.01  0.00  0.02 -0.04  0.69  0.04  0.05  0.02 -0.02  0.09 -0.03  0.05 0.55
self_restraint  0.13  0.17 -0.10 -0.06 -0.05  0.13  0.23 -0.11  0.21  0.06 -0.04  0.03  0.33 0.44
sounds         -0.09 -0.06 -0.07  0.24  0.15  0.18 -0.14  0.06  0.10  0.21  0.10  0.20  0.02 0.27
temperature     0.00 -0.01 -0.10 -0.01  0.72  0.03 -0.02  0.02  0.10  0.08 -0.07 -0.04 -0.02 0.57
thoughts        0.28  0.22 -0.11 -0.03 -0.05  0.24  0.18  0.05  0.13 -0.01  0.01  0.02  0.09 0.51
tired           0.13 -0.10  0.08  0.00  0.08  0.11 -0.03  0.11  0.49 -0.09  0.10  0.10  0.08 0.61
                 u2 com
angry          0.37 4.4
beliefs        0.45 3.4
calm           0.47 3.2
choices        0.58 1.3
communicating  0.50 1.1
computations   0.17 1.9
conscious      0.54 2.6
depressed      0.31 2.1
depth          0.54 1.9
desires        0.32 1.1
disrespected   0.32 2.8
embarrassed    0.33 1.2
emo_recog      0.54 3.4
fear           0.29 2.5
free_will      0.37 1.0
goal           0.66 4.3
guilt          0.33 1.8
happy          0.21 1.2
hungry         0.16 5.5
intentions     0.56 3.3
joy            0.21 1.1
love           0.35 2.0
morality       0.46 2.7
nauseated      0.52 3.5
odors          0.40 1.2
pain           0.29 3.9
personality    0.38 1.6
pleasure       0.40 1.6
pride          0.23 3.4
reasoning      0.62 3.4
recognizing    0.54 2.5
remembering    0.41 2.3
safe           0.28 1.5
seeing         0.78 5.7
self_aware     0.45 1.1
self_restraint 0.56 5.1
sounds         0.73 7.2
temperature    0.43 1.1
thoughts       0.49 5.0
tired          0.39 1.9

                       MR1  MR4  MR5  MR6  MR3  MR7  MR8 MR10 MR12  MR2  MR9 MR11 MR13
SS loadings           4.04 1.76 2.04 1.64 1.37 1.59 1.69 1.72 1.62 1.44 1.61 1.28 1.26
Proportion Var        0.10 0.04 0.05 0.04 0.03 0.04 0.04 0.04 0.04 0.04 0.04 0.03 0.03
Cumulative Var        0.10 0.15 0.20 0.24 0.27 0.31 0.35 0.40 0.44 0.47 0.51 0.55 0.58
Proportion Explained  0.18 0.08 0.09 0.07 0.06 0.07 0.07 0.07 0.07 0.06 0.07 0.06 0.05
Cumulative Proportion 0.18 0.25 0.34 0.41 0.47 0.54 0.61 0.69 0.76 0.82 0.89 0.95 1.00

 With factor correlations of 
       MR1   MR4   MR5   MR6   MR3  MR7   MR8  MR10  MR12   MR2   MR9  MR11  MR13
MR1   1.00  0.23  0.56  0.03 -0.21 0.27  0.43  0.45  0.35 -0.14  0.48 -0.03  0.41
MR4   0.23  1.00  0.16  0.21  0.14 0.43  0.26  0.23  0.17 -0.01  0.31  0.12  0.24
MR5   0.56  0.16  1.00  0.01 -0.19 0.17  0.35  0.22  0.18 -0.04  0.37 -0.03  0.32
MR6   0.03  0.21  0.01  1.00  0.29 0.21  0.19 -0.07 -0.11  0.38 -0.01 -0.17  0.19
MR3  -0.21  0.14 -0.19  0.29  1.00 0.15  0.01 -0.02 -0.09  0.09 -0.08  0.13 -0.02
MR7   0.27  0.43  0.17  0.21  0.15 1.00  0.28  0.29  0.18  0.00  0.24  0.08  0.23
MR8   0.43  0.26  0.35  0.19  0.01 0.28  1.00  0.14  0.07  0.17  0.24 -0.17  0.47
MR10  0.45  0.23  0.22 -0.07 -0.02 0.29  0.14  1.00  0.40 -0.32  0.44  0.30  0.13
MR12  0.35  0.17  0.18 -0.11 -0.09 0.18  0.07  0.40  1.00 -0.40  0.37  0.33  0.06
MR2  -0.14 -0.01 -0.04  0.38  0.09 0.00  0.17 -0.32 -0.40  1.00 -0.25 -0.33  0.21
MR9   0.48  0.31  0.37 -0.01 -0.08 0.24  0.24  0.44  0.37 -0.25  1.00  0.23  0.17
MR11 -0.03  0.12 -0.03 -0.17  0.13 0.08 -0.17  0.30  0.33 -0.33  0.23  1.00 -0.19
MR13  0.41  0.24  0.32  0.19 -0.02 0.23  0.47  0.13  0.06  0.21  0.17 -0.19  1.00

Mean item complexity =  2.7
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 338  and the objective function was  1.02 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  394 with the empirical chi square  160.41  with prob <  1 
The total number of observations was  400  with MLE Chi Square =  382.35  with prob <  0.048 

Tucker Lewis Index of factoring reliability =  0.986
RMSEA index =  0.022  and the 90 % confidence intervals are  0.002 0.027
BIC =  -1642.77
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR4  MR5  MR6  MR3  MR7  MR8 MR10 MR12  MR2
Correlation of scores with factors             0.95 0.88 0.90 0.87 0.86 0.85 0.85 0.88 0.85 0.89
Multiple R square of scores with factors       0.91 0.78 0.81 0.76 0.75 0.72 0.73 0.77 0.73 0.78
Minimum correlation of possible factor scores  0.82 0.55 0.61 0.52 0.49 0.45 0.46 0.54 0.45 0.57
                                                MR9 MR11 MR13
Correlation of scores with factors             0.86 0.85 0.81
Multiple R square of scores with factors       0.75 0.72 0.66
Minimum correlation of possible factor scores  0.49 0.44 0.31
efa_comb_max_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Small rotated solution

# do factor analysis
efa_comb_small_rot <- fa(d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type, cor = cor_type)
efa_comb_small_rot
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
angry           0.65  0.20  0.02 0.53 0.47 1.2
beliefs         0.64 -0.13  0.15 0.46 0.54 1.2
calm            0.55  0.28  0.10 0.50 0.50 1.6
choices         0.12  0.09  0.47 0.27 0.73 1.2
communicating   0.11 -0.27  0.40 0.26 0.74 1.9
computations    0.07 -0.80  0.29 0.73 0.27 1.3
conscious      -0.06  0.25  0.53 0.31 0.69 1.4
depressed       0.77  0.12 -0.03 0.65 0.35 1.0
depth          -0.28  0.05  0.52 0.27 0.73 1.6
desires         0.49  0.32  0.08 0.44 0.56 1.8
disrespected    0.78  0.04 -0.03 0.62 0.38 1.0
embarrassed     0.68 -0.05 -0.10 0.42 0.58 1.1
emo_recog       0.50 -0.28  0.22 0.36 0.64 2.0
fear            0.39  0.57  0.10 0.60 0.40 1.8
free_will       0.09  0.14  0.46 0.26 0.74 1.3
goal            0.37 -0.05  0.28 0.26 0.74 1.9
guilt           0.73 -0.04 -0.04 0.51 0.49 1.0
happy           0.84  0.05 -0.02 0.73 0.27 1.0
hungry          0.05  0.90 -0.01 0.82 0.18 1.0
intentions      0.28 -0.31  0.39 0.35 0.65 2.8
joy             0.84  0.06 -0.07 0.71 0.29 1.0
love            0.75  0.05  0.00 0.58 0.42 1.0
morality        0.53 -0.26  0.19 0.37 0.63 1.8
nauseated       0.13  0.57  0.11 0.39 0.61 1.2
odors          -0.20  0.68  0.25 0.46 0.54 1.5
pain            0.17  0.77  0.07 0.69 0.31 1.1
personality     0.63 -0.15  0.18 0.46 0.54 1.3
pleasure        0.62  0.21  0.02 0.50 0.50 1.2
pride           0.90 -0.10 -0.09 0.74 0.26 1.0
reasoning       0.06 -0.04  0.56 0.34 0.66 1.0
recognizing     0.07 -0.34  0.46 0.35 0.65 1.9
remembering     0.10 -0.39  0.47 0.40 0.60 2.0
safe            0.37  0.45  0.26 0.54 0.46 2.5
seeing         -0.08  0.13  0.42 0.18 0.82 1.2
self_aware      0.21  0.11  0.42 0.29 0.71 1.6
self_restraint  0.43 -0.06  0.24 0.28 0.72 1.6
sounds         -0.21  0.09  0.44 0.19 0.81 1.5
temperature    -0.38  0.03  0.49 0.28 0.72 1.9
thoughts        0.48  0.15  0.29 0.44 0.56 1.9
tired           0.34  0.53  0.11 0.51 0.49 1.8

                       MR1  MR2  MR3
SS loadings           9.51 4.88 3.66
Proportion Var        0.24 0.12 0.09
Cumulative Var        0.24 0.36 0.45
Proportion Explained  0.53 0.27 0.20
Cumulative Proportion 0.53 0.80 1.00

 With factor correlations of 
     MR1   MR2   MR3
MR1 1.00  0.24  0.25
MR2 0.24  1.00 -0.02
MR3 0.25 -0.02  1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 663  and the objective function was  3.26 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.04 

The harmonic number of observations is  394 with the empirical chi square  865.63  with prob <  1.7e-07 
The total number of observations was  400  with MLE Chi Square =  1248.87  with prob <  2.2e-38 

Tucker Lewis Index of factoring reliability =  0.91
RMSEA index =  0.049  and the 90 % confidence intervals are  0.043 0.051
BIC =  -2723.48
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.98 0.97 0.92
Multiple R square of scores with factors       0.96 0.93 0.84
Minimum correlation of possible factor scores  0.91 0.87 0.69
# examine eigenvalues and variance explained
efa_comb_small_rot_eigenvalues <- print(efa_comb_small_rot)$Vaccounted %>%
  t() %>%
  data.frame()
Factor Analysis using method =  minres
Call: fa(r = d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type, 
    cor = cor_type)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
angry           0.65  0.20  0.02 0.53 0.47 1.2
beliefs         0.64 -0.13  0.15 0.46 0.54 1.2
calm            0.55  0.28  0.10 0.50 0.50 1.6
choices         0.12  0.09  0.47 0.27 0.73 1.2
communicating   0.11 -0.27  0.40 0.26 0.74 1.9
computations    0.07 -0.80  0.29 0.73 0.27 1.3
conscious      -0.06  0.25  0.53 0.31 0.69 1.4
depressed       0.77  0.12 -0.03 0.65 0.35 1.0
depth          -0.28  0.05  0.52 0.27 0.73 1.6
desires         0.49  0.32  0.08 0.44 0.56 1.8
disrespected    0.78  0.04 -0.03 0.62 0.38 1.0
embarrassed     0.68 -0.05 -0.10 0.42 0.58 1.1
emo_recog       0.50 -0.28  0.22 0.36 0.64 2.0
fear            0.39  0.57  0.10 0.60 0.40 1.8
free_will       0.09  0.14  0.46 0.26 0.74 1.3
goal            0.37 -0.05  0.28 0.26 0.74 1.9
guilt           0.73 -0.04 -0.04 0.51 0.49 1.0
happy           0.84  0.05 -0.02 0.73 0.27 1.0
hungry          0.05  0.90 -0.01 0.82 0.18 1.0
intentions      0.28 -0.31  0.39 0.35 0.65 2.8
joy             0.84  0.06 -0.07 0.71 0.29 1.0
love            0.75  0.05  0.00 0.58 0.42 1.0
morality        0.53 -0.26  0.19 0.37 0.63 1.8
nauseated       0.13  0.57  0.11 0.39 0.61 1.2
odors          -0.20  0.68  0.25 0.46 0.54 1.5
pain            0.17  0.77  0.07 0.69 0.31 1.1
personality     0.63 -0.15  0.18 0.46 0.54 1.3
pleasure        0.62  0.21  0.02 0.50 0.50 1.2
pride           0.90 -0.10 -0.09 0.74 0.26 1.0
reasoning       0.06 -0.04  0.56 0.34 0.66 1.0
recognizing     0.07 -0.34  0.46 0.35 0.65 1.9
remembering     0.10 -0.39  0.47 0.40 0.60 2.0
safe            0.37  0.45  0.26 0.54 0.46 2.5
seeing         -0.08  0.13  0.42 0.18 0.82 1.2
self_aware      0.21  0.11  0.42 0.29 0.71 1.6
self_restraint  0.43 -0.06  0.24 0.28 0.72 1.6
sounds         -0.21  0.09  0.44 0.19 0.81 1.5
temperature    -0.38  0.03  0.49 0.28 0.72 1.9
thoughts        0.48  0.15  0.29 0.44 0.56 1.9
tired           0.34  0.53  0.11 0.51 0.49 1.8

                       MR1  MR2  MR3
SS loadings           9.51 4.88 3.66
Proportion Var        0.24 0.12 0.09
Cumulative Var        0.24 0.36 0.45
Proportion Explained  0.53 0.27 0.20
Cumulative Proportion 0.53 0.80 1.00

 With factor correlations of 
     MR1   MR2   MR3
MR1 1.00  0.24  0.25
MR2 0.24  1.00 -0.02
MR3 0.25 -0.02  1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  21.99 with Chi Square of  8462.22
The degrees of freedom for the model are 663  and the objective function was  3.26 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.04 

The harmonic number of observations is  394 with the empirical chi square  865.63  with prob <  1.7e-07 
The total number of observations was  400  with MLE Chi Square =  1248.87  with prob <  2.2e-38 

Tucker Lewis Index of factoring reliability =  0.91
RMSEA index =  0.049  and the 90 % confidence intervals are  0.043 0.051
BIC =  -2723.48
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.98 0.97 0.92
Multiple R square of scores with factors       0.96 0.93 0.84
Minimum correlation of possible factor scores  0.91 0.87 0.69
efa_comb_small_rot_eigenvalues
# but see https://www.researchgate.net/post/How_to_calculate_the_explained_variance_per_factor_in_a_principal_axis_factor_analysis if rotation != "varimax"
# takeaway: use "Proportion.Var" instead of "Proportion.Explained"

Loadings

# make dataframe for all factor loadings and dominant factor
efa_comb_small_rot_loadings <- efa_comb_small_rot$loadings[] %>%
  fa.sort() %>%
  data.frame() %>%
  rownames_to_column(var = "capacity") %>%
  rename(F1 = MR1, F2 = MR2, F3 = MR3) %>% # adjust by hand as needed
  mutate(F1_abs = abs(F1),
         F2_abs = abs(F2),
         F3_abs = abs(F3),
         loading_abs = pmax(F1_abs, F2_abs, F3_abs),
         loading = ifelse(loading_abs == abs(F1), F1,
                          ifelse(loading_abs == abs(F2), F2,
                                 ifelse(loading_abs == abs(F3), F3,
                                        NA))),
         factor = ifelse(loading == F1, "F1",
                         ifelse(loading == F2, "F2",
                                ifelse(loading == F3, "F3",
                                       NA))),
         factorName = ifelse(loading == F1, "Factor 1",
                             ifelse(loading == F2, "Factor 2",
                                    ifelse(loading == F3, "Factor 3",
                                           NA)))) %>%
  select(capacity, F1, F2, F3, factor, factorName, loading, loading_abs) %>%
  distinct() %>%
  full_join(d %>% select(capacity, capWording)) %>%
  mutate(capWording = gsub("\\ ", "_", gsub(" --.*", "", capWording))) %>%
  select(capacity, capWording, F1:loading_abs) %>%
  distinct()
Joining, by = "capacity"
joining factor and character vector, coercing into character vector
# print out list of items by dominant factor
efa_comb_small_rot_items <- efa_comb_small_rot_loadings %>%
  arrange(factor, desc(loading_abs)) %>%
  mutate(capWordingPlus = ifelse(loading > 0, capWording, 
                                 paste0(capWording, " (negative loading)"))) %>%
  group_by(factor) %>%
  summarise(items = gsub("_", " ", paste(capWordingPlus, collapse = ", ")))
head(efa_comb_small_rot_items$items, 40)
[1] "feel proud, feel happy, feel joy, get hurt feelings, feel sad, feel love, feel guilty, feel embarrassed, get angry, have beliefs, have a personality, feel pleasure, feel calm, know what's nice and what's mean, understand how somebody else is feeling, have desires, have thoughts, have self-control, have goals"
[2] "get hungry, do math (negative loading), feel pain, smell things, feel sick, feel scared, feel tired, feel safe"                                                                                                                                                                                                       
[3] "figure out how to do things, be aware of things, sense whether something is close by or far away, sense temperatures, remember things, make choices, decide what to do, recognize somebody else, hear sounds, be aware of itself, see things, communicate with somebody else, make plans"                             

Regression on factor scores

Children vs. adults

scores_all <- fa(d3_combined, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type,
                 cor = cor_type, scores = score_type)$scores %>%
  data.frame() %>%
  rownames_to_column(var = "subid") %>%
  mutate(ageGroup = factor(ifelse(grepl("run", subid), "adult", "child")))
colnames(scores_all)[2:4] <- c("score_F1", "score_F2", "score_F3")
# analyze
scores_all_analysis <- d %>%
  select(subid, ageGroup, character) %>%
  distinct() %>%
  left_join(scores_all) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1) & !is.na(score_F2) & !is.na(score_F3), !is.na(ageGroup)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor))
Joining, by = c("subid", "ageGroup")
joining character vector and factor, coercing into character vector
# set contrasts
contrasts(scores_all_analysis$factor) <- cbind(F1 = c(1, -1, 0), # MAKE SURE TO DOUBLE-CHECK!!
                                               F3 = c(0, -1, 1))
contrasts(scores_all_analysis$character) <- cbind(robot = c(-1, 1))
contrasts(scores_all_analysis$ageGroup) <- cbind(child = c(-1, 1))
r1 <- lmer(score ~ character * factor + (1 | subid), scores_all_analysis)
r2 <- lmer(score ~ character * factor + ageGroup + (1 | subid), scores_all_analysis)
r3 <- lmer(score ~ character * factor * ageGroup + (1 | subid), scores_all_analysis)
anova(r1, r2, r3)
refitting model(s) with ML (instead of REML)
Data: scores_all_analysis
Models:
r1: score ~ character * factor + (1 | subid)
r2: score ~ character * factor + ageGroup + (1 | subid)
r3: score ~ character * factor * ageGroup + (1 | subid)
   Df    AIC    BIC  logLik deviance   Chisq Chi Df Pr(>Chisq)    
r1  8 2640.6 2680.8 -1312.3   2624.6                              
r2  9 2557.5 2602.7 -1269.8   2539.5  85.129      1  < 2.2e-16 ***
r3 14 2380.1 2450.5 -1176.1   2352.1 187.387      5  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# summary(r1)
# summary(r2)
summary(r3)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * ageGroup + (1 | subid)
   Data: scores_all_analysis

REML criterion at convergence: 2418.9

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.5185 -0.4598  0.0316  0.5694  2.7240 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.1435   0.3789  
 Residual             0.3703   0.6085  
Number of obs: 1125, groups:  subid, 375

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.007703   0.026702  -0.288
characterrobot                        -0.280088   0.026702 -10.490
factorF1                              -0.002132   0.025676  -0.083
factorF3                               0.011748   0.025676   0.458
ageGroupchild                          0.261141   0.026702   9.780
characterrobot:factorF1                0.162318   0.025676   6.322
characterrobot:factorF3                0.426972   0.025676  16.629
characterrobot:ageGroupchild           0.054106   0.026702   2.026
factorF1:ageGroupchild                 0.364138   0.025676  14.182
factorF3:ageGroupchild                -0.210615   0.025676  -8.203
characterrobot:factorF1:ageGroupchild  0.007340   0.025676   0.286
characterrobot:factorF3:ageGroupchild -0.039077   0.025676  -1.522

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 agGrpc chr:F1 chr:F3 chrc:G fcF1:G fcF3:G c:F1:G
charactrrbt  0.001                                                                      
factorF1     0.000  0.000                                                               
factorF3     0.000  0.000 -0.500                                                        
ageGropchld -0.019  0.035  0.000  0.000                                                 
chrctrrb:F1  0.000  0.000  0.001 -0.001  0.000                                          
chrctrrb:F3  0.000  0.000 -0.001  0.001  0.000 -0.500                                   
chrctrrbt:G  0.035 -0.019  0.000  0.000  0.001  0.000  0.000                            
fctrF1:gGrp  0.000  0.000 -0.019  0.009  0.000  0.035 -0.017  0.000                     
fctrF3:gGrp  0.000  0.000  0.009 -0.019  0.000 -0.017  0.035  0.000 -0.500              
chrctr:F1:G  0.000  0.000  0.035 -0.017  0.000 -0.019  0.009  0.000  0.001 -0.001       
chrctr:F3:G  0.000  0.000 -0.017  0.035  0.000  0.009 -0.019  0.000 -0.001  0.001 -0.500
round(signif(summary(r3)$coefficients, 3), 2) %>% data.frame() # %>% View()
# stepwise regression
drop1(r3, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * ageGroup + (1 | subid)
                          Df    AIC    LRT Pr(Chi)
<none>                       2380.1               
character:factor:ageGroup  2 2378.8 2.6407   0.267
r3_step2 <- lmer(score ~ character * factor + ageGroup + character:ageGroup + factor:ageGroup + (1 | subid), scores_all_analysis)
drop1(r3_step2, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + ageGroup + character:ageGroup + 
    factor:ageGroup + (1 | subid)
                   Df    AIC    LRT Pr(Chi)    
<none>                2378.8                   
character:factor    2 2796.0 421.21 < 2e-16 ***
character:ageGroup  1 2380.9   4.13 0.04219 *  
factor:ageGroup     2 2555.4 180.62 < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
r3_step3 <- lmer(score ~ character * factor + ageGroup + factor:ageGroup + (1 | subid), scores_all_analysis)
drop1(r3_step3, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + ageGroup + factor:ageGroup + (1 | 
    subid)
                 Df    AIC    LRT   Pr(Chi)    
<none>              2380.9                     
character:factor  2 2798.1 421.21 < 2.2e-16 ***
factor:ageGroup   2 2557.5 180.62 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# # robot only
# robot_r1 <- lmer(score ~ factor + (1 | subid), scores_all_analysis %>% filter(character == "robot"))
# robot_r2 <- lmer(score ~ factor + ageGroup + (1 | subid), scores_all_analysis %>% filter(character == "robot"))
# robot_r3 <- lmer(score ~ factor * ageGroup + (1 | subid), scores_all_analysis %>% filter(character == "robot"))
# anova(robot_r1, robot_r2, robot_r3)
# # summary(robot_r1)
# # summary(robot_r2)
# summary(robot_r3)
scores_all_plotting <- d %>%
  select(subid, ageGroup, character) %>%
  distinct() %>%
  full_join(scores_all) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1), !is.na(score_F2), !is.na(score_F3), !is.na(ageGroup)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor)) %>%
  multi_boot(column = "score",
             summary_groups = c("ageGroup", "character", "factor"),
             statistics_functions = c("mean", "ci_lower", "ci_upper"))
Joining, by = c("subid", "ageGroup")
joining character vector and factor, coercing into character vector
# plot
ggplot(scores_all_plotting %>%
         ungroup() %>%
         mutate(factor = factor(factor,
                                labels = c("Social-emotional",
                                           "Physiological",
                                           "Perceptual-cognitive")),
                ageGroup = factor(ageGroup,
                                  levels = c("child", "adult"),
                                  labels = c("children", "adults"))),
       aes(x = ageGroup, y = mean, color = character, shape = character)) +
  facet_wrap("factor", ncol = 3) +
  theme_bw() +
  theme(text = element_text(size = 28),
        legend.position = "bottom") +
  geom_point(size = 5, position = position_dodge(width = 0.4)) +
  geom_errorbar(aes(ymin = ci_lower, ymax = ci_upper), 
                width = 0.2, position = position_dodge(width = 0.4)) +
  scale_shape_manual(values = c(19, 15)) +
  labs(title = "Factor scores by age group",
       # subtitle = "Adults (Study 1) vs. children (Study 2)\n",
       x = "Age group",
       y = "Mean factor score") # 1000 by 500

Children by age at test

scores_children <- fa(d3_child, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type,
                 cor = cor_type, scores = score_type)$scores %>%
  data.frame() %>%
  rownames_to_column(var = "subid") %>%
  mutate(ageGroup = factor(ifelse(grepl("run", subid), "adult", "child")))
colnames(scores_children)[2:4] <- c("score_F1", "score_F2", "score_F3")
# analyze
scores_children_analysis <- d %>%
  select(subid, age, character) %>%
  distinct() %>%
  left_join(scores_children) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1) & !is.na(score_F2) & !is.na(score_F3), !is.na(ageGroup)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# set contrasts
contrasts(scores_children_analysis$factor) <- cbind(F1 = c(1, -1, 0), # MAKE SURE TO DOUBLE-CHECK!!
                                               F3 = c(0, -1, 1))
contrasts(scores_children_analysis$character) <- cbind(robot = c(-1, 1))
r4 <- lmer(score ~ character * factor + (1 | subid), scores_children_analysis)
r5 <- lmer(score ~ character * factor + scale(age) + (1 | subid), scores_children_analysis)
r6 <- lmer(score ~ character * factor * scale(age) + (1 | subid), scores_children_analysis)
anova(r4, r5, r6)
refitting model(s) with ML (instead of REML)
Data: scores_children_analysis
Models:
r4: score ~ character * factor + (1 | subid)
r5: score ~ character * factor + scale(age) + (1 | subid)
r6: score ~ character * factor * scale(age) + (1 | subid)
   Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)    
r4  8 1349.2 1384.0 -666.60   1333.2                             
r5  9 1349.1 1388.3 -665.55   1331.1  2.083      1     0.1489    
r6 14 1326.0 1386.9 -648.99   1298.0 33.124      5  3.556e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# summary(r4)
# summary(r5)
summary(r6)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * scale(age) + (1 | subid)
   Data: scores_children_analysis

REML criterion at convergence: 1354.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.7447 -0.6084  0.0992  0.6120  1.7989 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.1869   0.4323  
 Residual             0.4376   0.6615  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                                    Estimate Std. Error t value
(Intercept)                        -0.011058   0.041788  -0.265
characterrobot                     -0.276799   0.041788  -6.624
factorF1                            0.004414   0.039127   0.113
factorF3                            0.026090   0.039127   0.667
scale(age)                         -0.068391   0.041940  -1.631
characterrobot:factorF1             0.192426   0.039127   4.918
characterrobot:factorF3             0.378237   0.039127   9.667
characterrobot:scale(age)          -0.093505   0.041940  -2.229
factorF1:scale(age)                -0.181942   0.039270  -4.633
factorF3:scale(age)                 0.175481   0.039270   4.469
characterrobot:factorF1:scale(age) -0.049025   0.039270  -1.248
characterrobot:factorF3:scale(age)  0.017576   0.039270   0.448

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:() fF3:() c:F1:(
charactrrbt  0.037                                                                      
factorF1     0.000  0.000                                                               
factorF3     0.000  0.000 -0.500                                                        
scale(age)   0.004  0.030  0.000  0.000                                                 
chrctrrb:F1  0.000  0.000  0.037 -0.018  0.000                                          
chrctrrb:F3  0.000  0.000 -0.018  0.037  0.000 -0.500                                   
chrctrrb:()  0.030  0.004  0.000  0.000  0.083  0.000  0.000                            
fctrF1:sc()  0.000  0.000  0.004 -0.002  0.000  0.030 -0.015  0.000                     
fctrF3:sc()  0.000  0.000 -0.002  0.004  0.000 -0.015  0.030  0.000 -0.500              
chrct:F1:()  0.000  0.000  0.030 -0.015  0.000  0.004 -0.002  0.000  0.083 -0.041       
chrct:F3:()  0.000  0.000 -0.015  0.030  0.000 -0.002  0.004  0.000 -0.041  0.083 -0.500
# stepwise regression
drop1(r6, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * scale(age) + (1 | subid)
                            Df    AIC    LRT Pr(Chi)
<none>                         1326.0               
character:factor:scale(age)  2 1323.6 1.6309  0.4424
r6_step2 <- lmer(score ~ character * factor + scale(age) + character:scale(age) + factor:scale(age) + (1 | subid), scores_children_analysis)
drop1(r6_step2, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + scale(age) + character:scale(age) + 
    factor:scale(age) + (1 | subid)
                     Df    AIC     LRT   Pr(Chi)    
<none>                  1323.6                      
character:factor      2 1495.9 176.314 < 2.2e-16 ***
character:scale(age)  1 1326.6   5.011   0.02519 *  
factor:scale(age)     2 1346.1  26.482 1.776e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r6_step2)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + scale(age) + character:scale(age) +  
    factor:scale(age) + (1 | subid)
   Data: scores_children_analysis

REML criterion at convergence: 1346.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.7360 -0.6072  0.1213  0.6161  1.7471 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.1871   0.4325  
 Residual             0.4372   0.6612  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                           Estimate Std. Error t value
(Intercept)               -0.011058   0.041788  -0.265
characterrobot            -0.276799   0.041788  -6.624
factorF1                   0.005869   0.039089   0.150
factorF3                   0.025568   0.039089   0.654
scale(age)                -0.068391   0.041940  -1.631
characterrobot:factorF1    0.192599   0.039106   4.925
characterrobot:factorF3    0.378175   0.039106   9.671
characterrobot:scale(age) -0.093505   0.041940  -2.229
factorF1:scale(age)       -0.177878   0.039114  -4.548
factorF3:scale(age)        0.174024   0.039114   4.449

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:()
charactrrbt  0.037                                                        
factorF1     0.000  0.000                                                 
factorF3     0.000  0.000 -0.500                                          
scale(age)   0.004  0.030  0.000  0.000                                   
chrctrrb:F1  0.000  0.000  0.037 -0.018  0.000                            
chrctrrb:F3  0.000  0.000 -0.018  0.037  0.000 -0.500                     
chrctrrb:()  0.030  0.004  0.000  0.000  0.083  0.000  0.000              
fctrF1:sc()  0.000  0.000  0.001 -0.001  0.000  0.030 -0.015  0.000       
fctrF3:sc()  0.000  0.000 -0.001  0.001  0.000 -0.015  0.030  0.000 -0.500
# explore polynoial effects of age
r6b <- lmer(score ~ character * factor * poly(age, 1) + (1 | subid), scores_children_analysis)
r7 <- lmer(score ~ character * factor * poly(age, 2) + (1 | subid), scores_children_analysis)
r8 <- lmer(score ~ character * factor * poly(age, 3) + (1 | subid), scores_children_analysis)
anova(r6b, r7, r8)
refitting model(s) with ML (instead of REML)
Data: scores_children_analysis
Models:
r6b: score ~ character * factor * poly(age, 1) + (1 | subid)
r7: score ~ character * factor * poly(age, 2) + (1 | subid)
r8: score ~ character * factor * poly(age, 3) + (1 | subid)
    Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
r6b 14 1326.0 1386.9 -648.99   1298.0                         
r7  20 1333.6 1420.7 -646.82   1293.6 4.3390      6     0.6309
r8  26 1339.2 1452.4 -643.63   1287.2 6.3931      6     0.3806
# summary(r6b)
# summary(r7)
summary(r8)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * poly(age, 3) + (1 | subid)
   Data: scores_children_analysis

REML criterion at convergence: 1286

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.6776 -0.5895  0.1163  0.6146  1.8350 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.1863   0.4317  
 Residual             0.4395   0.6630  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.009218   0.041837  -0.220
characterrobot                        -0.273475   0.041837  -6.537
factorF1                               0.005125   0.039254   0.131
factorF3                               0.025541   0.039254   0.651
poly(age, 3)1                         -1.609781   1.006591  -1.599
poly(age, 3)2                          1.558244   1.006784   1.548
poly(age, 3)3                         -1.004197   1.006149  -0.998
characterrobot:factorF1                0.192529   0.039254   4.905
characterrobot:factorF3                0.379938   0.039254   9.679
characterrobot:poly(age, 3)1          -2.262846   1.006591  -2.248
characterrobot:poly(age, 3)2           0.911678   1.006784   0.906
characterrobot:poly(age, 3)3          -0.014819   1.006149  -0.015
factorF1:poly(age, 3)1                -4.209639   0.944458  -4.457
factorF3:poly(age, 3)1                 4.192109   0.944458   4.439
factorF1:poly(age, 3)2                -0.006339   0.944639  -0.007
factorF3:poly(age, 3)2                 0.788518   0.944639   0.835
factorF1:poly(age, 3)3                 0.358472   0.944043   0.380
factorF3:poly(age, 3)3                -0.906646   0.944043  -0.960
characterrobot:factorF1:poly(age, 3)1 -1.133380   0.944458  -1.200
characterrobot:factorF3:poly(age, 3)1  0.374304   0.944458   0.396
characterrobot:factorF1:poly(age, 3)2  0.544462   0.944639   0.576
characterrobot:factorF3:poly(age, 3)2 -0.279024   0.944639  -0.295
characterrobot:factorF1:poly(age, 3)3  1.620142   0.944043   1.716
characterrobot:factorF3:poly(age, 3)3  0.080046   0.944043   0.085

Correlation matrix not shown by default, as p = 24 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
round(signif(summary(r6)$coefficients, 3), 2) %>% data.frame() # %>% View()
# stepwise regression
drop1(r8, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * poly(age, 3) + (1 | subid)
                              Df    AIC    LRT Pr(Chi)
<none>                           1339.2               
character:factor:poly(age, 3)  6 1333.5 6.2353  0.3973
r8_step2 <- lmer(score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 3):character + poly(age, 3):factor + (1 | subid), scores_children_analysis)
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
drop1(r8_step2, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 6 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 4 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
Single term deletions

Model:
score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 
    3):character + poly(age, 3):factor + (1 | subid)
                              Df    AIC     LRT Pr(Chi)
<none>                           1339.5                
character:poly(age, 3)         1 1337.5 0.00023  0.9880
factor:poly(age, 3)            2 1336.6 1.06360  0.5875
character:factor:poly(age, 2)  4 1333.5 1.94831  0.7453
r8_step3 <- lmer(score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 2) + character:poly(age, 2) + factor:poly(age, 2), scores_children_analysis)
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
drop1(r8_step3, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
Single term deletions

Model:
score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 
    2) + character:poly(age, 2) + factor:poly(age, 2)
                       Df    AIC     LRT   Pr(Chi)    
<none>                    1328.6                      
poly(age, 3)            1 1327.6   1.042   0.30730    
character:factor        2 1501.7 177.145 < 2.2e-16 ***
character:poly(age, 2)  2 1330.6   6.068   0.04813 *  
factor:poly(age, 2)     4 1348.0  27.429 1.628e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r8_step3)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age,  
    2) + character:poly(age, 2) + factor:poly(age, 2)
   Data: scores_children_analysis

REML criterion at convergence: 1307.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.6334 -0.6248  0.1262  0.6120  1.8183 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.1849   0.4300  
 Residual             0.4384   0.6621  
Number of obs: 573, groups:  subid, 191

Fixed effects:
                              Estimate Std. Error t value
(Intercept)                  -0.009222   0.041722  -0.221
characterrobot               -0.273473   0.041723  -6.555
factorF1                      0.005865   0.039145   0.150
factorF3                      0.025625   0.039145   0.655
poly(age, 3)1                -1.608642   1.000886  -1.607
poly(age, 3)2                 1.558439   1.003958   1.552
poly(age, 3)3                -1.002889   0.999495  -1.003
characterrobot:factorF1       0.192500   0.039203   4.910
characterrobot:factorF3       0.379724   0.039203   9.686
characterrobot:poly(age, 2)1 -2.262649   1.003765  -2.254
characterrobot:poly(age, 2)2  0.911745   1.004034   0.908
factorF1:poly(age, 2)1       -4.254305   0.936802  -4.541
factorF3:poly(age, 2)1        4.163146   0.936802   4.444
factorF1:poly(age, 2)2       -0.051458   0.937381  -0.055
factorF3:poly(age, 2)2        0.806436   0.937381   0.860

Correlation matrix not shown by default, as p = 15 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
fit warnings:
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
# # robot only
# robot_r4 <- lmer(score ~ factor + (1 | subid), scores_children_analysis %>% filter(character == "robot"))
# robot_r5 <- lmer(score ~ factor + scale(age) + (1 | subid), scores_children_analysis %>% filter(character == "robot"))
# robot_r6 <- lmer(score ~ factor * scale(age) + (1 | subid), scores_children_analysis %>% filter(character == "robot"))
# anova(robot_r4, robot_r5, robot_r6)
# # summary(robot_r4)
# # summary(robot_r5)
# summary(robot_r6)
scores_children_plotting <- d %>%
  select(subid, age, character) %>%
  distinct() %>%
  full_join(scores_children) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1), !is.na(score_F2), !is.na(score_F3), !is.na(age)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor)) %>%
  multi_boot(column = "score",
             summary_groups = c("age", "character", "factor"),
             statistics_functions = c("mean", "ci_lower", "ci_upper"))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# plot
ggplot(scores_children_plotting %>%
         ungroup() %>%
         mutate(factor = factor(factor,
                                labels = c("Social-emotional",
                                           "Physiological",
                                           "Perceptual-cognitive"))),
       aes(x = age, y = mean, color = character, fill = character, shape = character)) +
  facet_wrap("factor", ncol = 3) +
  theme_bw() +
  theme(text = element_text(size = 28),
        legend.position = "bottom") +
  # geom_smooth(method = "loess", alpha = 0.4) +
  geom_smooth(method = "lm", alpha = 0.4) +
  geom_point(size = 2) +
  scale_shape_manual(values = c(19, 15)) +
  labs(title = "Factor scores by children's age",
       # subtitle = "Children (Study 2)\n",
       x = "Age (years)",
       y = "Factor score") # 1000 by 500

Adults by age at test

scores_adults <- fa(d3_adult, nfactors = efa_comb_max_unrot_nfactors, rotate = rot_type,
                 cor = cor_type, scores = score_type)$scores %>%
  data.frame() %>%
  rownames_to_column(var = "subid") %>%
  mutate(ageGroup = factor(ifelse(grepl("run", subid), "adult", "adult")))
colnames(scores_adults)[2:4] <- c("score_F1", "score_F2", "score_F3")
# analyze
scores_adults_analysis <- d %>%
  select(subid, age, character) %>%
  distinct() %>%
  left_join(scores_adults) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1) & !is.na(score_F2) & !is.na(score_F3), !is.na(age)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# set contrasts
contrasts(scores_adults_analysis$factor) <- cbind(F1 = c(1, -1, 0), # MAKE SURE TO DOUBLE-CHECK!!
                                               F3 = c(0, -1, 1))
contrasts(scores_adults_analysis$character) <- cbind(robot = c(-1, 1))
r4 <- lmer(score ~ character * factor + (1 | subid), scores_adults_analysis)
r5 <- lmer(score ~ character * factor + scale(age) + (1 | subid), scores_adults_analysis)
r6 <- lmer(score ~ character * factor * scale(age) + (1 | subid), scores_adults_analysis)
anova(r4, r5, r6)
refitting model(s) with ML (instead of REML)
Data: scores_adults_analysis
Models:
r4: score ~ character * factor + (1 | subid)
r5: score ~ character * factor + scale(age) + (1 | subid)
r6: score ~ character * factor * scale(age) + (1 | subid)
   Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
r4  8 1207.3 1241.6 -595.64   1191.3                         
r5  9 1208.1 1246.7 -595.06   1190.1 1.1564      1     0.2822
r6 14 1213.8 1273.8 -592.92   1185.8 4.2809      5     0.5097
# summary(r4)
# summary(r5)
summary(r6)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * scale(age) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1242.2

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.0168 -0.4237 -0.0343  0.4084  4.6002 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.2230   0.4723  
 Residual             0.3908   0.6251  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                                    Estimate Std. Error t value
(Intercept)                        -0.011207   0.044438  -0.252
characterrobot                     -0.293458   0.044438  -6.604
factorF1                           -0.016593   0.038161  -0.435
factorF3                            0.005019   0.038161   0.132
scale(age)                         -0.050393   0.044797  -1.125
characterrobot:factorF1             0.058056   0.038161   1.521
characterrobot:factorF3             0.540104   0.038161  14.153
characterrobot:scale(age)           0.024901   0.044797   0.556
factorF1:scale(age)                -0.052757   0.038469  -1.371
factorF3:scale(age)                 0.018846   0.038469   0.490
characterrobot:factorF1:scale(age) -0.015534   0.038469  -0.404
characterrobot:factorF3:scale(age)  0.051006   0.038469   1.326

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:() fF3:() c:F1:(
charactrrbt -0.017                                                                      
factorF1     0.000  0.000                                                               
factorF3     0.000  0.000 -0.500                                                        
scale(age)   0.002 -0.016  0.000  0.000                                                 
chrctrrb:F1  0.000  0.000 -0.017  0.008  0.000                                          
chrctrrb:F3  0.000  0.000  0.008 -0.017  0.000 -0.500                                   
chrctrrb:() -0.016  0.002  0.000  0.000 -0.120  0.000  0.000                            
fctrF1:sc()  0.000  0.000  0.002 -0.001  0.000 -0.016  0.008  0.000                     
fctrF3:sc()  0.000  0.000 -0.001  0.002  0.000  0.008 -0.016  0.000 -0.500              
chrct:F1:()  0.000  0.000 -0.016  0.008  0.000  0.002 -0.001  0.000 -0.120  0.060       
chrct:F3:()  0.000  0.000  0.008 -0.016  0.000 -0.001  0.002  0.000  0.060 -0.120 -0.500
# stepwise regression
drop1(r6, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * scale(age) + (1 | subid)
                            Df    AIC    LRT Pr(Chi)
<none>                         1213.8               
character:factor:scale(age)  2 1211.7 1.8848  0.3897
r6_step2 <- lmer(score ~ character * factor + scale(age) + character:scale(age) + factor:scale(age) + (1 | subid), scores_adults_analysis)
drop1(r6_step2, test = "Chisq")
Single term deletions

Model:
score ~ character * factor + scale(age) + character:scale(age) + 
    factor:scale(age) + (1 | subid)
                     Df    AIC     LRT Pr(Chi)    
<none>                  1211.7                    
character:factor      2 1427.8 220.084  <2e-16 ***
character:scale(age)  1 1210.0   0.316  0.5742    
factor:scale(age)     2 1209.8   2.080  0.3534    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r6_step2)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + scale(age) + character:scale(age) +  
    factor:scale(age) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1234.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.0512 -0.4230 -0.0566  0.4368  4.6452 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.2231   0.4723  
 Residual             0.3906   0.6250  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                           Estimate Std. Error t value
(Intercept)               -0.011207   0.044438  -0.252
characterrobot            -0.293458   0.044438  -6.604
factorF1                  -0.016837   0.038148  -0.441
factorF3                   0.005821   0.038148   0.153
scale(age)                -0.050393   0.044797  -1.125
characterrobot:factorF1    0.058089   0.038153   1.523
characterrobot:factorF3    0.539995   0.038153  14.154
characterrobot:scale(age)  0.024901   0.044797   0.556
factorF1:scale(age)       -0.054621   0.038183  -1.431
factorF3:scale(age)        0.024964   0.038183   0.654

Correlation of Fixed Effects:
            (Intr) chrctr fctrF1 fctrF3 scl(g) chr:F1 chr:F3 chr:() fF1:()
charactrrbt -0.017                                                        
factorF1     0.000  0.000                                                 
factorF3     0.000  0.000 -0.500                                          
scale(age)   0.002 -0.016  0.000  0.000                                   
chrctrrb:F1  0.000  0.000 -0.017  0.008  0.000                            
chrctrrb:F3  0.000  0.000  0.008 -0.017  0.000 -0.500                     
chrctrrb:() -0.016  0.002  0.000  0.000 -0.120  0.000  0.000              
fctrF1:sc()  0.000  0.000  0.000  0.000  0.000 -0.016  0.008  0.000       
fctrF3:sc()  0.000  0.000  0.000  0.000  0.000  0.008 -0.016  0.000 -0.500
# explore polynoial effects of age
r6b <- lmer(score ~ character * factor * poly(age, 1) + (1 | subid), scores_adults_analysis)
r7 <- lmer(score ~ character * factor * poly(age, 2) + (1 | subid), scores_adults_analysis)
r8 <- lmer(score ~ character * factor * poly(age, 3) + (1 | subid), scores_adults_analysis)
anova(r6b, r7, r8)
refitting model(s) with ML (instead of REML)
Data: scores_adults_analysis
Models:
r6b: score ~ character * factor * poly(age, 1) + (1 | subid)
r7: score ~ character * factor * poly(age, 2) + (1 | subid)
r8: score ~ character * factor * poly(age, 3) + (1 | subid)
    Df    AIC    BIC  logLik deviance   Chisq Chi Df Pr(>Chisq)  
r6b 14 1213.8 1273.8 -592.92   1185.8                            
r7  20 1213.4 1299.1 -586.69   1173.4 12.4708      6    0.05225 .
r8  26 1224.7 1336.1 -586.34   1172.7  0.7074      6    0.99433  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# summary(r6b)
summary(r7)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * poly(age, 2) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1182.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.0899 -0.4027 -0.0625  0.3979  4.5820 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.2258   0.4752  
 Residual             0.3838   0.6195  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.013821   0.044604  -0.310
characterrobot                        -0.288926   0.044604  -6.478
factorF1                              -0.012467   0.037934  -0.329
factorF3                               0.004282   0.037934   0.113
poly(age, 2)1                         -1.300348   1.050355  -1.238
poly(age, 2)2                         -1.351269   1.067305  -1.266
characterrobot:factorF1                0.050154   0.037934   1.322
characterrobot:factorF3                0.547843   0.037934  14.442
characterrobot:poly(age, 2)1           0.789137   1.050355   0.751
characterrobot:poly(age, 2)2           0.735624   1.067305   0.689
factorF1:poly(age, 2)1                -1.007735   0.893292  -1.128
factorF3:poly(age, 2)1                 0.375079   0.893292   0.420
factorF1:poly(age, 2)2                 2.362246   0.907707   2.602
factorF3:poly(age, 2)2                -2.361103   0.907707  -2.601
characterrobot:factorF1:poly(age, 2)1 -0.728801   0.893292  -0.816
characterrobot:factorF3:poly(age, 2)1  1.530346   0.893292   1.713
characterrobot:factorF1:poly(age, 2)2 -1.150237   0.907707  -1.267
characterrobot:factorF3:poly(age, 2)2  0.114011   0.907707   0.126

Correlation matrix not shown by default, as p = 18 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
summary(r8)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * poly(age, 3) + (1 | subid)
   Data: scores_adults_analysis

REML criterion at convergence: 1171.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.1034 -0.4011 -0.0510  0.3955  4.6072 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.2280   0.4775  
 Residual             0.3878   0.6227  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                                       Estimate Std. Error t value
(Intercept)                           -0.013618   0.045051  -0.302
characterrobot                        -0.290844   0.045051  -6.456
factorF1                              -0.012000   0.038324  -0.313
factorF3                               0.003807   0.038324   0.099
poly(age, 3)1                         -1.284857   1.096062  -1.172
poly(age, 3)2                         -1.321065   1.097023  -1.204
poly(age, 3)3                          0.548704   1.150627   0.477
characterrobot:factorF1                0.049074   0.038324   1.281
characterrobot:factorF3                0.547170   0.038324  14.278
characterrobot:poly(age, 3)1           0.664243   1.096062   0.606
characterrobot:poly(age, 3)2           0.650407   1.097023   0.593
characterrobot:poly(age, 3)3           0.057939   1.150627   0.050
factorF1:poly(age, 3)1                -0.976145   0.932389  -1.047
factorF3:poly(age, 3)1                 0.344958   0.932389   0.370
factorF1:poly(age, 3)2                 2.394466   0.933206   2.566
factorF3:poly(age, 3)2                -2.374164   0.933206  -2.544
factorF1:poly(age, 3)3                 0.287298   0.978805   0.294
factorF3:poly(age, 3)3                 0.226055   0.978805   0.231
characterrobot:factorF1:poly(age, 3)1 -0.799517   0.932389  -0.857
characterrobot:factorF3:poly(age, 3)1  1.487166   0.932389   1.595
characterrobot:factorF1:poly(age, 3)2 -1.202131   0.933206  -1.288
characterrobot:factorF3:poly(age, 3)2  0.090213   0.933206   0.097
characterrobot:factorF1:poly(age, 3)3 -0.070350   0.978805  -0.072
characterrobot:factorF3:poly(age, 3)3  0.180401   0.978805   0.184

Correlation matrix not shown by default, as p = 24 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
round(signif(summary(r6)$coefficients, 3), 2) %>% data.frame() # %>% View()
# stepwise regression
drop1(r8, test = "Chisq")
Single term deletions

Model:
score ~ character * factor * poly(age, 3) + (1 | subid)
                              Df    AIC    LRT Pr(Chi)
<none>                           1224.7               
character:factor:poly(age, 3)  6 1217.5 4.8345  0.5652
r8_step2 <- lmer(score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 3):character + poly(age, 3):factor + (1 | subid), scores_adults_analysis)
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
drop1(r8_step2, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 6 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 4 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 8 columns / coefficients
Single term deletions

Model:
score ~ character * factor * poly(age, 2) + poly(age, 3) + poly(age, 
    3):character + poly(age, 3):factor + (1 | subid)
                              Df    AIC    LRT Pr(Chi)
<none>                           1220.7               
character:poly(age, 3)         1 1218.7 0.0027  0.9589
factor:poly(age, 3)            2 1217.1 0.3780  0.8278
character:factor:poly(age, 2)  4 1217.5 4.7984  0.3086
r8_step3 <- lmer(score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 2) + character:poly(age, 2) + factor:poly(age, 2), scores_adults_analysis)
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
drop1(r8_step3, test = "Chisq")
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
Single term deletions

Model:
score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age, 
    2) + character:poly(age, 2) + factor:poly(age, 2)
                       Df    AIC     LRT Pr(Chi)    
<none>                    1212.1                    
poly(age, 3)            1 1210.4   0.291 0.58980    
character:factor        2 1432.5 224.396 < 2e-16 ***
character:poly(age, 2)  2 1208.8   0.689 0.70858    
factor:poly(age, 2)     4 1213.7   9.571 0.04831 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(r8_step3)
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor + poly(age, 3) + (1 | subid) + poly(age,  
    2) + character:poly(age, 2) + factor:poly(age, 2)
   Data: scores_adults_analysis

REML criterion at convergence: 1191.1

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.1355 -0.4001 -0.0436  0.4120  4.6959 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.2269   0.4764  
 Residual             0.3847   0.6203  
Number of obs: 537, groups:  subid, 179

Fixed effects:
                              Estimate Std. Error t value
(Intercept)                  -0.013396   0.044705  -0.300
characterrobot               -0.290959   0.044862  -6.486
factorF1                     -0.016726   0.037859  -0.442
factorF3                      0.005705   0.037859   0.151
poly(age, 3)1                -1.270282   1.054085  -1.205
poly(age, 3)2                -1.310171   1.072356  -1.222
poly(age, 3)3                 0.568822   1.075902   0.529
characterrobot:factorF1       0.051489   0.037971   1.356
characterrobot:factorF3       0.546883   0.037971  14.402
characterrobot:poly(age, 2)1  0.656489   1.082040   0.607
characterrobot:poly(age, 2)2  0.642943   1.083806   0.593
factorF1:poly(age, 2)1       -1.262164   0.877291  -1.439
factorF3:poly(age, 2)1        0.575451   0.877291   0.656
factorF1:poly(age, 2)2        2.026798   0.879689   2.304
factorF3:poly(age, 2)2       -2.115283   0.879689  -2.405

Correlation matrix not shown by default, as p = 15 > 12.
Use print(x, correlation=TRUE)  or
     vcov(x)     if you need it
fit warnings:
fixed-effect model matrix is rank deficient so dropping 2 columns / coefficients
scores_adults_plotting <- d %>%
  filter(!is.na(age)) %>%
  select(subid, age, character) %>%
  distinct() %>%
  full_join(scores_adults) %>%
  mutate(character = factor(character)) %>%
  filter(!is.na(score_F1), !is.na(score_F2), !is.na(score_F3), !is.na(age)) %>%
  gather(factor, score, starts_with("score_")) %>%
  mutate(factor = factor(factor)) %>%
  multi_boot(column = "score",
             summary_groups = c("age", "character", "factor"),
             statistics_functions = c("mean", "ci_lower", "ci_upper"))
Joining, by = "subid"
joining character vector and factor, coercing into character vector
# plot
ggplot(scores_adults_plotting %>%
         ungroup() %>%
         mutate(factor = factor(factor,
                                labels = c("Social-emotional",
                                           "Physiological",
                                           "Perceptual-cognitive"))),
       aes(x = age, y = mean, color = character, fill = character, shape = character)) +
  facet_wrap("factor", ncol = 3) +
  theme_bw() +
  theme(text = element_text(size = 28),
        legend.position = "bottom") +
  # geom_smooth(method = "loess", alpha = 0.4) +
  geom_smooth(method = "lm", alpha = 0.4) +
  geom_point(size = 2) +
  scale_shape_manual(values = c(19, 15)) +
  labs(title = "Factor scores by adults's age",
       # subtitle = "Adults (Study 2)\n",
       x = "Age (years)",
       y = "Factor score") # 1000 by 500

Big figure

# by condition
d1_bycond2 <- d2 %>%
  left_join(d_child02 %>% select(subid, age)) %>%
  select(character, capacity, capWording, responseNum, subid, ageGroup, age) %>%
  filter(capacity != "na", is.na(responseNum) == F) %>%
  mutate(capWording = gsub(" --.*", "", capWording),
         ageGroup3 = ifelse(ageGroup == "adult", "adult",
                            ifelse(is.na(age), NA,
                                   ifelse(age < 8, "7y", 
                                          ifelse(age < 9, "8y",
                                                 ifelse(age < 10, "9y",
                                                        NA)))))) %>%
  distinct()
Joining, by = c("subid", "age")
joining factors with different levels, coercing to character vector
d1_bycond2 %>% select(ageGroup3, subid) %>% distinct() %>% count(ageGroup3)
# make df for plotting
d1_bycond2_mb <- multi_boot(d1_bycond2,
                           column = "responseNum",
                           summary_groups = c("ageGroup3", "character", "capacity", "capWording"),
                           statistics_functions = c("mean", "ci_lower", "ci_upper"))
d1_bycond2_mb_factorsAll <- d1_bycond2_mb %>% 
  full_join(efa_comb_small_rot_loadings %>%
              group_by(factor) %>%
              mutate(order = rank(desc(loading_abs)))) %>%
  arrange(character, factor, desc(loading_abs)) %>%
  rownames_to_column(var = "full_order") %>%
  mutate(full_order = as.numeric(full_order)) %>%
  arrange(factorName, full_order) %>%
  ungroup() %>%
  filter(!is.na(ageGroup3)) %>%
  mutate(factorName = factor(factorName,
                             levels = c("Factor 1", "Factor 2", "Factor 3"),
                             labels = c("Social-emotional", 
                                        "Physiological", 
                                        "Perceptual-cognitive")))
Joining, by = c("capacity", "capWording")
joining character vector and factor, coercing into character vector
dodge_width <- 2
ggplot(d1_bycond2_mb_factorsAll, 
       aes(x = desc(order*2), y = mean,
           color = ageGroup3, shape = ageGroup3,
           label = capWording)) +
  facet_grid(factorName ~ character, scales = "free", space = "free") +
  geom_hline(yintercept = 0, lty = 3) +
  geom_hline(yintercept = 0.5, lty = 3) +
  geom_hline(yintercept = 1, lty = 3) +
  geom_point(stat = "identity", position = position_dodge(width = dodge_width), size = 8) +
  scale_shape_manual(values = c(rep(18, 3), 17)) +
  # scale_colour_brewer(type = "seq", palette = "PuRd") +
  scale_colour_hue(h = c(0, 180)) +
  geom_errorbar(aes(ymin = ci_lower, ymax = ci_upper),
                position = position_dodge(width = dodge_width), width = 0) +
  geom_text(aes(y = -0.5, hjust = 0), 
            color = "black",
            # color = d1_bycond2_mb_factorsAll$textColor,
            size = 8) +
  labs(title = "Responses by mental capacity item",
       y = "Mean response (0 = NO, 0.5 = KINDA, 1 = YES)",
       x = "Capacity",
       color = "Age group: ", shape = "Age group: ") +
  scale_y_continuous(breaks = c(0, 0.5, 1)) +
  coord_flip() +
  theme_bw() +
  theme(text = element_text(size = 28),
        # axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "top") # 1700 by 2000

# FILTERED BY ROBOT
# feel safe
with(d2 %>% filter(capWording == "feel_safe", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 82    15   3
   child 33    22  40
  #summary()
# feel tired
with(d2 %>% filter(capWording == "feel_tired", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 88     6   6
   child 38    20  36
  #summary()
# feel scared
with(d2 %>% filter(capWording == "feel_scared", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 93     4   3
   child 50    18  28
  #summary()
# get hungry
with(d2 %>% filter(capWording == "get_hungry", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 96     1   2
   child 74     5  15
  #summary()
# feel pain
with(d2 %>% filter(capWording == "feel_pain", 
                   !is.na(responseCat),
                   character == "robot"),
     table(ageGroup, responseCat)) #%>%
        responseCat
ageGroup no kinda yes
   adult 94     4   2
   child 65    12  17
  #summary()
# feel proud
proud_table <- with(d2 %>% filter(capWording == "feel_proud", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
proud_table
         responseCat
ageGroup3         no      kinda        yes
    7     0.16666667 0.13888889 0.69444444
    8     0.33333333 0.21212121 0.45454545
    9     0.45833333 0.20833333 0.33333333
    adult 0.90099010 0.08910891 0.00990099
proud_table[3,2]+proud_table[3,3]
[1] 0.5416667
# feel happy
happy_table <- with(d2 %>% filter(capWording == "feel_happy", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
happy_table
         responseCat
ageGroup3         no      kinda        yes
    7     0.16666667 0.11111111 0.72222222
    8     0.28571429 0.17142857 0.54285714
    9     0.41666667 0.16666667 0.41666667
    adult 0.89108911 0.03960396 0.06930693
happy_table[3,2]+happy_table[3,3]
[1] 0.5833333
# feel guilty
guilty_table <- with(d2 %>% filter(capWording == "feel_guilty", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
guilty_table
         responseCat
ageGroup3        no     kinda       yes
    7     0.4594595 0.2162162 0.3243243
    8     0.4705882 0.2058824 0.3235294
    9     0.5000000 0.2500000 0.2500000
    adult 0.9700000 0.0300000 0.0000000
guilty_table[1,2]+guilty_table[1,3]
[1] 0.5405405
guilty_table[2,2]+guilty_table[2,3]
[1] 0.5294118
guilty_table[3,2]+guilty_table[3,3]
[1] 0.5
clm_guilty <- ordinal::clm(responseCat ~ age,
                           data = d2 %>% 
                             filter(capWording == "feel_guilty",
                                    !is.na(responseCat),
                                    character == "robot"))
summary(clm_guilty)
formula: responseCat ~ age
data:    d2 %>% filter(capWording == "feel_guilty", !is.na(responseCat), character == "robot")

 link  threshold nobs logLik  AIC    niter max.grad cond.H 
 logit flexible  191  -113.71 233.42 7(0)  1.42e-10 1.2e+03

Coefficients:
    Estimate Std. Error z value Pr(>|z|)    
age  -0.1834     0.0362  -5.065 4.09e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
          Estimate Std. Error z value
no|kinda   -1.6428     0.4161  -3.948
kinda|yes  -0.6527     0.4109  -1.588
(4 observations deleted due to missingness)
# personality
personality_table <- with(d2 %>% filter(capWording == "have_a_personality", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
personality_table
         responseCat
ageGroup3         no      kinda        yes
    7     0.25000000 0.22222222 0.52777778
    8     0.23529412 0.32352941 0.44117647
    9     0.29166667 0.33333333 0.37500000
    adult 0.62745098 0.30392157 0.06862745
personality_table[3,2]+personality_table[3,3]
[1] 0.7083333
# self-control
self_control_table <- with(d2 %>% filter(capWording == "have_self-control", 
                   !is.na(responseCat),
                   character == "robot") %>%
       mutate(ageGroup3 = ifelse(ageGroup == "adult", "adult",
                                 ifelse(is.na(age), NA,
                                        ifelse(age < 8, "7",
                                               ifelse(age < 9, "8",
                                                      "9"))))),
     table(ageGroup3, responseCat)) %>%
  prop.table(1) 
self_control_table
         responseCat
ageGroup3        no     kinda       yes
    7     0.2777778 0.2222222 0.5000000
    8     0.2857143 0.2857143 0.4285714
    9     0.3333333 0.1666667 0.5000000
    adult 0.5643564 0.2673267 0.1683168
self_control_table[1,2]+self_control_table[1,3]
[1] 0.7222222
self_control_table[2,2]+self_control_table[2,3]
[1] 0.7142857
self_control_table[3,2]+self_control_table[3,3]
[1] 0.6666667
clm_self_control <- ordinal::clm(responseCat ~ age,
                                 data = d2 %>% 
                                   filter(capWording == "have_self-control",
                                          !is.na(responseCat),
                                          character == "robot"))
summary(clm_self_control)
formula: responseCat ~ age
data:    
d2 %>% filter(capWording == "have_self-control", !is.na(responseCat), character == "robot")

 link  threshold nobs logLik  AIC    niter max.grad cond.H 
 logit flexible  192  -198.17 402.34 4(0)  2.02e-08 3.6e+03

Coefficients:
    Estimate Std. Error z value Pr(>|z|)    
age -0.03914    0.01013  -3.863 0.000112 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Threshold coefficients:
          Estimate Std. Error z value
no|kinda  -1.12987    0.25948  -4.354
kinda|yes -0.02018    0.24554  -0.082
(4 observations deleted due to missingness)
# MORE GENERAL
at_least_kinda_9y <- d2 %>% 
  filter(!is.na(responseCat),
         ageGroup == "child",
         !is.na(age),
         age > 9) %>%
  distinct() %>%
  count(character, capacity, responseCat) %>%
  group_by(character, capacity) %>%
  mutate(prop_n = n/sum(n, na.rm = T)) %>%
  select(-n) %>%
  spread(responseCat, prop_n) %>% # n) %>%
  mutate(at_least_kinda = sum(kinda, yes)) %>%
  left_join(efa_comb_small_rot_loadings) %>%
  arrange(factor, desc(at_least_kinda))
Joining, by = "capacity"
joining character vector and factor, coercing into character vector
at_least_kinda_9y %>%
  select(character:at_least_kinda, factor, loading)
at_least_kinda_adult <- d2 %>% 
  filter(!is.na(responseCat),
         character == "robot",
         ageGroup == "adult") %>%
  distinct() %>%
  count(capacity, responseCat) %>%
  group_by(capacity) %>%
  mutate(prop_n = n/sum(n, na.rm = T)) %>%
  select(-n) %>%
  spread(responseCat, prop_n) %>% # n) %>%
  mutate(at_least_kinda = sum(kinda, yes)) %>%
  left_join(efa_comb_small_rot_loadings) %>%
  arrange(factor, desc(at_least_kinda))
Joining, by = "capacity"
joining character vector and factor, coercing into character vector
at_least_kinda_adult %>%
  select(capacity:at_least_kinda, factor, loading)

BIG TABLE

# make dataframe
big_table <- efa_adult_small_rot_loadings %>% 
  setNames(paste0('adult_', names(.))) %>% 
  rename(capacity = adult_capacity, 
         capWording = adult_capWording) %>%
  full_join(efa_child_small_rot_loadings %>%
              setNames(paste0('child_', names(.))) %>%
              rename(capacity = child_capacity,
                     capWording = child_capWording)) %>%
  full_join(efa_comb_small_rot_loadings %>%
              setNames(paste0('comb_', names(.))) %>%
              rename(capacity = comb_capacity, 
                     capWording = comb_capWording)) %>%
  arrange(comb_factor, desc(comb_loading_abs)) %>%
  mutate(capWording = gsub("_", " ", capWording)) %>%
  select(capWording, 
         adult_F2, child_F1, comb_F1, # double-check adults!
         adult_F1, child_F2, comb_F2, # double-check adults!
         adult_F3, child_F3, comb_F3) %>%
  column_to_rownames(var = "capWording") %>%
  signif(3) %>%
  round(2)
Joining, by = c("capacity", "capWording")
Joining, by = c("capacity", "capWording")
big_table
cor.ci(scores_all %>% column_to_rownames(var = "subid") %>% select(-ageGroup))
Call:corCi(x = x, keys = keys, n.iter = n.iter, p = p, overlap = overlap, 
    poly = poly, method = method, plot = plot)

 Coefficients and bootstrapped confidence intervals 
         sc_F1 sc_F2 sc_F3
score_F1  1.00            
score_F2  0.28  1.00      
score_F3  0.30 -0.03  1.00

 scale correlations and bootstrapped confidence intervals 
            lower.emp lower.norm estimate upper.norm upper.emp    p
sc_F1-sc_F2      0.18       0.19     0.28       0.36      0.35 0.00
sc_F1-sc_F3      0.23       0.22     0.30       0.39      0.39 0.00
sc_F2-sc_F3     -0.11      -0.12    -0.03       0.06      0.07 0.53

# by condition
d1_bycond3 <- d2 %>%
  left_join(d_child02 %>% select(subid, age)) %>%
  select(character, capacity, capWording, responseCat, subid, ageGroup, age) %>%
  filter(capacity != "na", !is.na(responseCat)) %>%
  mutate(capWording = gsub(" --.*", "", capWording),
         ageGroup3 = ifelse(ageGroup == "adult", "adult",
                            ifelse(is.na(age), NA,
                                   ifelse(age < 8, "7y", 
                                          ifelse(age < 9, "8y",
                                                 ifelse(age < 10, "9y",
                                                        NA)))))) %>%
  distinct()
Joining, by = c("subid", "age")
joining factors with different levels, coercing to character vector
d1_bycond3 %>% select(ageGroup3, subid) %>% distinct() %>% count(ageGroup3)
# make df for plotting
d1_bycond3_mb_factorsAll <- d1_bycond3 %>% 
  full_join(efa_comb_small_rot_loadings %>%
              group_by(factor) %>%
              mutate(order = rank(desc(loading_abs)))) %>%
  arrange(character, factor, desc(loading_abs)) %>%
  rownames_to_column(var = "full_order") %>%
  mutate(full_order = as.numeric(full_order)) %>%
  arrange(factorName, full_order) %>%
  ungroup() %>%
  filter(!is.na(ageGroup3)) %>%
  mutate(factorName = factor(factorName,
                             levels = c("Factor 1", "Factor 2", "Factor 3"),
                             labels = c("Social-emotional", 
                                        "Physiological", 
                                        "Perceptual-cognitive")),
         agentic = ifelse(capWording %in% c("decide_what_to_do", "make_choices", "have_self_control", 
                                            "make_plans", "have_goals", 
                                            "understand_how_somebody_else_is_feeling",
                                            "know_what's_nice_and_what's_mean", "have_thoughts",
                                            "remember_things", "communicate_with_somebody_else"),
                          TRUE, FALSE))
Joining, by = c("capacity", "capWording")
joining character vector and factor, coercing into character vector
d1_bycond3_annotate <- d1_bycond3_mb_factorsAll %>% 
  filter(order <= 4) %>% 
  select(character, order, capWording) %>% 
  distinct()
# ggplot(d1_bycond3_mb_factorsAll %>% filter(order <= 4), 
#        aes(x = interaction(ageGroup3, desc(order*2)), 
#            # y = responseCat,
#            # color = ageGroup3, shape = ageGroup3,
#            fill = responseCat,
#            label = ageGroup3)) +
#            # label = gsub("_", " ", paste(capWording, ageGroup3, sep = ": ")))) +
#   # facet_grid(factorName ~ character * order, scales = "free", space = "free") +
#   facet_grid(factorName ~ character, scales = "free", space = "free") +
#   geom_bar(position = "fill") +
#   geom_text(aes(y = -0.5, hjust = 0), 
#             color = "black",
#             # color = d1_bycond2_mb_factorsAll$textColor,
#             size = 8) +
#   geom_text(aes(x = order, y = 1.5, label = capWording), hjust = -1) +
#   # annotate("text", aes(facet = order, label = d1_bycond3_annotate$capWording)) +
#   labs(title = "Responses by mental capacity item",
#        y = "Relative frequency",
#        x = "Capacity * Age group",
#        fill = "Response: ") +
#   scale_y_continuous(breaks = c(0, 0.5, 1)) +
#   # coord_flip() +
#   theme_bw() +
#   theme(text = element_text(size = 28),
#         # axis.title.y = element_blank(),
#         axis.text.y = element_blank(),
#         axis.ticks.y = element_blank(),
#         legend.position = "top") # 1700 by 2000
ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(order <= 5) %>%
         mutate(facet = tools::toTitleCase(paste0(character, " (", ageGroup, ")"))), 
         # mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))), 
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           # fill = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(factorName ~ facet) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(aes(y = 5, hjust = 0), 
            color = "black",
            # color = d1_bycond2_mb_factorsAll$textColor,
            size = 8) +
  labs(title = "Responses by mental capacity item",
       y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  coord_flip() +
  theme_bw() +
  theme(text = element_text(size = 28),
        # axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "top") # 2000 by 1200

ggplot(d1_bycond3_mb_factorsAll %>%
         # filter(order <= 10) %>%
         # filter(order <= 5 | capWording %in% c("know_what's_nice_and_what's_mean",
         #                                       "make_choices")) %>% # add selected agency by factor
         mutate(facet = tools::toTitleCase(paste0(character, " (", ageGroup, ")"))), 
         # mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))), 
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           # fill = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(factorName ~ facet, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(aes(y = 5, hjust = 0), 
            color = "black",
            # color = d1_bycond2_mb_factorsAll$textColor,
            size = 8) +
  labs(title = "Responses by mental capacity item",
       y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  coord_flip() +
  theme_bw() +
  theme(text = element_text(size = 32),
        # axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        legend.position = "top") # 2000 by 1200

d_srcd <- d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5) %>%
  select(ageGroup, character, responseCat, order, capWording) %>%
  mutate(labeller = ifelse(responseCat == "no", gsub("_", " ", capWording), NA)) %>%
  distinct()
  
ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5) %>%
         mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))),
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(factorName ~ facet) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.2, 0.5, 1)) +
  # scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(data = d_srcd, 
            aes(x = desc(order*2), label = labeller, y = 5),
            hjust = 0, angle = 90, color = "black", size = 8, alpha = 1) +
  labs(title = "Responses by mental capacity item",
       y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  theme_bw() +
  theme(text = element_text(size = 28),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        legend.position = "bottom") # 1000 by 500

d_srcd2 <- d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5, character == "robot") %>%
  select(ageGroup, character, responseCat, order, capWording) %>%
  mutate(labeller = ifelse(responseCat == "no", gsub("_", " ", capWording), NA)) %>%
  distinct()
  
ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5) %>%
         mutate(facet = tolower(paste(ageGroup, character, sep = ": "))) %>%
         mutate(facet = factor(facet, 
                               levels = c("child: beetle", "child: robot", 
                                          "adult: beetle", "adult: robot"),
                               labels = c("children: beetle", "children: robot", 
                                          "adults: beetle", "adults: robot"))) %>%
         mutate(ageGroup2 = factor(ageGroup, levels = c("child", "adult"),
                                   labels = c("children", "adults"))),
       aes(x = desc(order*2), 
           fill = character,
           alpha = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(~ facet) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black") +
  scale_alpha_manual(values=c(0.2, 0.5, 1)) +
  # scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(data = d_srcd2, 
            aes(x = desc(order*2), label = labeller, y = 5),
            hjust = 0, angle = 90, color = "black", size = 8, alpha = 1) +
  labs(y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  labs(title = "Responses (raw counts)",
       y = "Count",
       x = "Capacity",
       alpha = "response: ",
       fill = "character: ") +
  theme_bw() +
  theme(text = element_text(size = 28),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        legend.position = "bottom") # 1000 by 500

ggplot(d1_bycond3_mb_factorsAll %>% 
         filter(factor == "F1", order <= 5, character == "robot") %>%
         mutate(facet = tools::toTitleCase(paste(ageGroup, character, sep = ": "))) %>%
         mutate(facet = factor(facet, 
                               levels = c("Child: Robot", "Adult: Robot"),
                               labels = c("Children: robot", "Adults: robot"))) %>%
         mutate(ageGroup2 = factor(ageGroup, levels = c("child", "adult"),
                                   labels = c("children", "adults"))),
       aes(x = desc(order*2), 
           alpha = responseCat,
           label = gsub("_", " ", capWording))) +
  facet_grid(~ ageGroup2) + #, scales = "free", space = "free") +
  geom_bar(position = "stack", color = "black", fill = "#00BFC4") +
  scale_alpha_manual(values=c(0.2, 0.5, 1)) +
  # scale_alpha_manual(values=c(0.4, 0.7, 1)) +
  geom_text(data = d_srcd2, 
            aes(x = desc(order*2), label = labeller, y = 5),
            hjust = 0, angle = 90, color = "black", size = 8, alpha = 1) +
  labs(y = "Count",
       x = "Capacity",
       alpha = "Response: ",
       fill = "Character: ") +
  theme_bw() +
  theme(text = element_text(size = 28),
        axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        legend.position = "bottom") # 600 by 500

LS0tCnRpdGxlOiAiRGlta2lkIGFuYWx5c2lzIgphdXRob3I6ICJLYXJhIFdlaXNtYW4iCmRhdGU6ICIxLzIyLzIwMTciCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdAotLS0KCiMgUHJlbGltaW5hcmllcwoKIyMgU2V0IHVwIGVudmlyb25tZW50CgpgYGB7ciBwcmVsaW19CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGxhbmdjb2cpCmxpYnJhcnkoc3RhdHMpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkoR1BBcm90YXRpb24pCmxpYnJhcnkobG1lNCkKbGlicmFyeShSQ29sb3JCcmV3ZXIpCgojIGNsZWFyIGVudmlyb25tZW50CnJtKGxpc3Q9bHMoKSkKZ3JhcGhpY3Mub2ZmKCkKYGBgCgojIyBSZWFkIGluIGRhdGEKCmBgYHtyIHJlYWRpbmd9CiMgQURVTFQgcnVuIDAxICgzLXBvaW50IHNjYWxlKQpkX2FkdWx0MDEgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvYWR1bHRzL3VzX3J1bi0wMV8yMDE2LTA2LTA1X2Fub255bWl6ZWQuY3N2IikgJT4lIHNlbGVjdCgtWCkKCiMgIyBBRFVMVCBydW4gMDIgKDctcG9pbnQgc2NhbGUpCiMgZF9hZHVsdDAyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDJfMjAxNi0wNy0xOV9hbm9ueW1pemVkLmNzdiIpICU+JSBzZWxlY3QoLVgpCiMgCiMgIyBBRFVMVCBydW4gMDMgKDMtcG9pbnQgc2NhbGUsIG9yaWdpbmFsIHdvcmRpbmcgZm9yICdmcmVlIHdpbGwnIGFuZCAnaW50ZW50aW9ucycpCiMgZF9hZHVsdDAzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDNfMjAxNi0xMi0wOF9hbm9ueW1pemVkLmNzdiIpICU+JSBzZWxlY3QoLVgpCgojIENISUxEIHJ1biAwMSBbbHlkaWEsIG9saXZpYSwgYWxsaWUgKHN1bW1lciAyMDE2KSArIG5pY2t5LCBkcnUsIGFyaWVsLCBvbGl2aWEgKGZhbGwgMjAxNikgKyBjYW1wYmVsbCAod2ludGVyIDIwMTcpXQpkX2NoaWxkMDEgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAxXzIwMTctMDEtMTlfYW5vbnltaXplZC5jc3YiKSAlPiUgc2VsZWN0KC1YKQoKIyBkZW1vZ3JhcGhpYyBpbmZvIChmb3IgY2hpbGRyZW4pCmNoaWxkX2RlbW8gPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vZGlta2lkX3BhcnRpY2lwYW50X2FnZXNfMjAxNy0wMS0xOS5jc3YiKQpgYGAKCiMjIFRpZHkgZGF0YQoKYGBge3IgdGlkeWluZ30KIyB0aWR5IGFkdWx0IHJ1biAwMQpkX2FkdWx0MDIgPC0gZF9hZHVsdDAxICU+JQogIHNlbGVjdChzdWJpZCwgYWdlLCBnZW5kZXIsIGV0aG5pY2l0eSwgZHVyYXRpb24sCiAgICAgICAgIGNoYXJOYW1lLCB0cmlhbE51bSwgY2FwYWNpdHksIGNhcFdvcmRpbmcsIAogICAgICAgICBob3ZlclRpbWUsIHJ0LCByZXNwb25zZSwgcmVzcG9uc2VOdW0pICU+JQogIHJlbmFtZShjaGFyYWN0ZXIgPSBjaGFyTmFtZSwKICAgICAgICAgc2Vzc2lvbkR1cmF0aW9uID0gZHVyYXRpb24pICU+JQogIG11dGF0ZShhZ2VHcm91cCA9ICJhZHVsdCIpCgojIHRpZHkgZGVtb2dyYXBoaWNzCmNoaWxkX2RlbW9fdGlkeSA8LSBjaGlsZF9kZW1vICU+JQogIG11dGF0ZShzdWJpZCA9IGdzdWIoIiAiLCAiIiwgc3ViaWQpKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCItIiwgIiIsIHN1YmlkKSkgJT4lCiAgbXV0YXRlKHN1YmlkID0gdG91cHBlcihzdWJpZCkpICU+JQogIHNlbGVjdChzdWJpZCwgYWdlLCBnZW5kZXIsIGV0aG5pY2l0eSkKCiMgdGlkeSBjaGlsZCBydW4gMDEKZF9jaGlsZDAyIDwtIGRfY2hpbGQwMSAlPiUKICBmaWx0ZXIoY2hhcmFjdGVyICVpbiUgYygiYmVldGxlIiwgInJvYm90IikpICAlPiUgIyBubyBlbGVwaGFudCBjb25kaXRpb24hIChuID0gMSBjaGlsZCkKICBzZWxlY3Qoc3ViaWQsIHNlc3Npb25EdXJhdGlvbiwKICAgICAgICAgY2hhcmFjdGVyLCB0cmlhbE51bSwgY2FwYWNpdHksIGNhcFdvcmRpbmcsIAogICAgICAgICBob3ZlclRpbWUsIHJ0LCByZXNwb25zZSwgcmVzcG9uc2VOdW0pICU+JQogIG11dGF0ZShhZ2VHcm91cCA9ICJjaGlsZCIpICU+JQogIG11dGF0ZShzdWJpZCA9IGdzdWIoIiAiLCAiIiwgc3ViaWQpKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBnc3ViKCItIiwgIiIsIHN1YmlkKSkgJT4lCiAgbXV0YXRlKHN1YmlkID0gdG91cHBlcihzdWJpZCkpICU+JQogIGxlZnRfam9pbihjaGlsZF9kZW1vX3RpZHkpICU+JQogIG11dGF0ZShzdWJpZCA9IGZhY3Rvcihhcy5jaGFyYWN0ZXIoc3ViaWQpKSkKCiMgY29tYmluZSBkYXRhc2V0cwpkIDwtIGRfYWR1bHQwMiAlPiUKICBmdWxsX2pvaW4oZF9jaGlsZDAyKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBmYWN0b3Ioc3ViaWQpLAogICAgICAgICBjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSwKICAgICAgICAgY2FwV29yZGluZyA9IGZhY3Rvcihnc3ViKCJcXCAiLCAiXyIsIGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpKSksCiAgICAgICAgIHJlc3BvbnNlQ2F0ID0gZmFjdG9yKHJlc3BvbnNlLCBsZXZlbHMgPSBjKCJubyIsICJraW5kYSIsICJ5ZXMiKSksCiAgICAgICAgIHJlc3BvbnNlTnVtID0gaWZlbHNlKHJlc3BvbnNlID09ICJubyIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZXNwb25zZSA9PSAia2luZGEiLCAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmVzcG9uc2UgPT0gInllcyIsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGFnZUdyb3VwID0gZmFjdG9yKGFnZUdyb3VwLCBsZXZlbHMgPSBjKCJhZHVsdCIsICJjaGlsZCIpKSkgJT4lCiAgZGlzdGluY3QoKQpgYGAKIyBEZW1vZ3JhcGhpY3MKCmBgYHtyIG4gcGFydGljaXBhbnRzfQojIHRvdGFsIG4KZCAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgYWdlKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBtdXRhdGUoYWdlR3JvdXAyID0gaWZlbHNlKGFnZUdyb3VwID09ICJhZHVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDcgfCBhZ2UgPiAxMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dCBvZiBhZ2UgcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShhZ2UpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pc3NpbmcgYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkIikpKSkgJT4lCiAgY291bnQoYWdlR3JvdXAyKQoKIyBkcm9wIGNoaWxkcmVuIG91dHNpZGUgb2YgdGFyZ2V0IGFnZSByYW5nZSAoNy05eSkKZDEgPC0gZCAlPiUKICBmaWx0ZXIoKGFnZSA+PSA3ICYgYWdlIDw9IDEwKSB8IGFnZUdyb3VwID09ICJhZHVsdCIpCgpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgYWdlKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICAgIG11dGF0ZShhZ2VHcm91cDIgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZHVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgNyB8IGFnZSA+IDEwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0IG9mIGFnZSByYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2luZyBhZ2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQiKSkpKSAlPiUKICBjb3VudChhZ2VHcm91cDIpCmBgYAoKYGBge3IgY29uZGl0aW9ufQojIGNvbmRpdGlvbgpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBjb3VudChhZ2VHcm91cCwgY2hhcmFjdGVyKQpgYGAKCmBgYHtyIGFnZX0KIyBhZ2UgCmQxICU+JSAKICBzZWxlY3QoYWdlR3JvdXAsIHN1YmlkLCBhZ2UpICU+JQogIGRpc3RpbmN0KC5rZWVwX2FsbCA9IFQpICU+JQogIGdyb3VwX2J5KGFnZUdyb3VwKSAlPiUKICBzdW1tYXJpc2UobWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2RfYWdlID0gc2QoYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtZWRpYW5fYWdlID0gbWVkaWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluX2FnZSA9IG1pbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlLCBuYS5ybSA9IFQpKQoKIyBwbG90IGNoaWxkcmVuJ3MgYWdlCnFwbG90KGQxICU+JSAKICAgICAgICBmaWx0ZXIoYWdlR3JvdXAgPT0gImNoaWxkIikgJT4lCiAgICAgICAgZGlzdGluY3Qoc3ViaWQsIC5rZWVwX2FsbCA9IFQpICU+JSAKICAgICAgICBzZWxlY3QoYWdlKSwgYmlucyA9IDE4KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gbWVkaWFuKGQxJGFnZVtkMSRhZ2VHcm91cCA9PSAiY2hpbGQiXSwgbmEucm0gPSBUKSwgY29sb3IgPSAicmVkIikKCiMgY2hlY2sgY2hpbGRyZW4ncyBhZ2UgYnkgY29uZGl0aW9uCmQxICU+JSAKICBmaWx0ZXIoYWdlR3JvdXAgPT0gImNoaWxkIikgJT4lCiAgZGlzdGluY3Qoc3ViaWQsIC5rZWVwX2FsbCA9IFQpICU+JSAKICBzZWxlY3QoYWdlLCBjaGFyYWN0ZXIpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlcikgJT4lIAogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oYWdlLCBuYS5ybSA9IFQpKQoKdC50ZXN0KGFnZSB+IGNoYXJhY3RlciwgCiAgICAgICBkMSAlPiUgCiAgICAgICAgIGZpbHRlcihhZ2VHcm91cCA9PSAiY2hpbGQiKSAlPiUKICAgICAgICAgc2VsZWN0KHN1YmlkLCBhZ2UsIGNoYXJhY3RlcikgJT4lIAogICAgICAgICBkaXN0aW5jdCkKCmdncGxvdChkMSAlPiUKICAgICAgICAgZmlsdGVyKGFnZUdyb3VwID09ICJjaGlsZCIpICU+JQogICAgICAgICBkaXN0aW5jdChzdWJpZCwgLmtlZXBfYWxsID0gVCkgJT4lIAogICAgICAgICBzZWxlY3QoYWdlLCBjaGFyYWN0ZXIpICU+JQogICAgICAgICBncm91cF9ieShjaGFyYWN0ZXIpICU+JQogICAgICAgICBtdXRhdGUobWVkaWFuX2FnZSA9IG1lZGlhbihhZ2UsIG5hLnJtID0gVCkpLAogICAgICAgYWVzKHggPSBhZ2UpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDkpICsKICBmYWNldF93cmFwKH4gY2hhcmFjdGVyKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gbWVkaWFuKGQkYWdlW2QkYWdlR3JvdXAgPT0gImNoaWxkIl0sIG5hLnJtID0gVCksIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdmxpbmUoYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW5fYWdlLCBjb2xvciA9IGNoYXJhY3RlciksIGx0eSA9IDIpCmBgYAoKYGBge3IgZHVyYXRpb259CiMgZHVyYXRpb24KZDEgJT4lCiAgZ3JvdXBfYnkoYWdlR3JvdXApICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lZGlhbiA9IG1lZGlhbihzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1pbiA9IG1pbihzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCkpCgojIHBsb3QgZHVyYXRpb24gYnkgYWdlIGdyb3VwIGFuZCBjaGFyYWN0ZXIKZ2dwbG90KGQxLCBhZXMoc2Vzc2lvbkR1cmF0aW9uKSkgKwogIGZhY2V0X2dyaWQoY2hhcmFjdGVyIH4gYWdlR3JvdXApICsKICBnZW9tX2hpc3RvZ3JhbShicmVha3MgPSAwOjE1KQoKdC50ZXN0KHNlc3Npb25EdXJhdGlvbiB+IGNoYXJhY3RlciwKICAgICAgIGQxICU+JQogICAgICAgICBmaWx0ZXIoYWdlR3JvdXAgPT0gImNoaWxkIikgJT4lCiAgICAgICAgIHNlbGVjdChzdWJpZCwgY2hhcmFjdGVyLCBzZXNzaW9uRHVyYXRpb24pICU+JQogICAgICAgICBsZWZ0X2pvaW4oZCAlPiUgc2VsZWN0KHN1YmlkLCBzZXNzaW9uRHVyYXRpb24pKSAlPiUKICAgICAgICAgbXV0YXRlKHN1YmlkID0gYXMuY2hhcmFjdGVyKHN1YmlkKSwKICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpLAogICAgICAgICAgICAgICAgc2Vzc2lvbkR1cmF0aW9uID0gcm91bmQoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoc2Vzc2lvbkR1cmF0aW9uKSksIDMpKSAlPiUKICAgICAgICAgZGlzdGluY3QoKSkKCnQudGVzdChzZXNzaW9uRHVyYXRpb24gfiBjaGFyYWN0ZXIsCiAgICAgICBkMSAlPiUKICAgICAgICAgZmlsdGVyKGFnZUdyb3VwID09ICJhZHVsdCIpICU+JQogICAgICAgICBzZWxlY3Qoc3ViaWQsIGNoYXJhY3Rlciwgc2Vzc2lvbkR1cmF0aW9uKSAlPiUKICAgICAgICAgbGVmdF9qb2luKGQgJT4lIHNlbGVjdChzdWJpZCwgc2Vzc2lvbkR1cmF0aW9uKSkgJT4lCiAgICAgICAgIG11dGF0ZShzdWJpZCA9IGFzLmNoYXJhY3RlcihzdWJpZCksCiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSwKICAgICAgICAgICAgICAgIHNlc3Npb25EdXJhdGlvbiA9IHJvdW5kKGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHNlc3Npb25EdXJhdGlvbikpLCAzKSkgJT4lCiAgICAgICAgIGRpc3RpbmN0KCkpCmBgYAoKYGBge3IgZ2VuZGVyfQojIGdlbmRlcgpkMSAlPiUKICBzZWxlY3QoYWdlR3JvdXAsIHN1YmlkLCBnZW5kZXIpICU+JQogIGRpc3RpbmN0KC5rZWVwX2FsbCA9IFQpICU+JQogIGNvdW50KGFnZUdyb3VwLCBnZW5kZXIpCmBgYAoKYGBge3IgZXRobmljaXR5fQojIGV0aG5pY2l0eQpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgZXRobmljaXR5KSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gdG9sb3dlcihldGhuaWNpdHkpKSAlPiUKICBtdXRhdGUoYmxhY2sgPSBncmVwbCgiYmxhY2siLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiYWZyaWNhbiBhbWVyaWNhbiIsIGV0aG5pY2l0eSksCiAgICAgICAgIGVhc3RfYXNpYW4gPSBncmVwbCgiZWFzdCBhc2lhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJlYXN0YXNpYW4iLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiY2hpbmVzZSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJjaGluYSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJrb3JlYSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJqYXBhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJ0YWl3YW4iLCBldGhuaWNpdHkpLAogICAgICAgICBzb3V0aF9hc2lhbiA9IGdyZXBsKCJzb3V0aCBhc2lhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJzb3V0aGFzaWFuIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoImluZGlhIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoInBha2lzdGFuIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoImJhbmdsYSIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJzcmkgbGFua2EiLCBldGhuaWNpdHkpLAogICAgICAgICBsYXRpbm8gPSBncmVwbCgibGF0aW4iLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiaGlzcGFuaWMiLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgibWV4aWMiLCBldGhuaWNpdHkpLAogICAgICAgICBtaWRkbGVfZWFzdGVybiA9IGdyZXBsKCJtaWRkbGUiLCBldGhuaWNpdHkpLAogICAgICAgICBwYWNfaXNsYW5kID0gZ3JlcGwoInBhY2lmaWMiLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiaGF3YWlpIiwgZXRobmljaXR5KSwKICAgICAgICAgbmF0aXZlX2FtID0gZ3JlcGwoIm5hdGl2ZWFtZXJpY2FuIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgZ3JlcGwoIm5hdGl2ZSBhbWVyaWNhbiIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgIGdyZXBsKCJhbWVyaWNhbiBpbmRpYW4iLCBldGhuaWNpdHkpIHwKICAgICAgICAgICBncmVwbCgiYWxhc2thIG5hdGl2ZSIsIGV0aG5pY2l0eSksCiAgICAgICAgIHdoaXRlID0gZ3JlcGwoIndoaXRlIiwgZXRobmljaXR5KSwKICAgICAgICAgb3RoZXIgPSBncmVwbCgib3RoZXIiLCBldGhuaWNpdHkpKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBnYXRoZXIoZXRobmljaXR5VEYsIFRGLCAtc3ViaWQsIC1ldGhuaWNpdHksIC1hZ2VHcm91cCkgJT4lCiAgZmlsdGVyKFRGKSAlPiUKICBjb3VudChhZ2VHcm91cCwgZXRobmljaXR5VEYpCgojIE5PVEU6IG5vdCBtdXR1YWxseSBleGNsdXNpdmUhIQoKIyBtdXR1YWxseSBleGNsdXNpdmUgdmVyc2lvbgpkMSAlPiUgCiAgc2VsZWN0KGFnZUdyb3VwLCBzdWJpZCwgZXRobmljaXR5KSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gdG9sb3dlcihldGhuaWNpdHkpKSAlPiUKICBkaXN0aW5jdCgua2VlcF9hbGwgPSBUKSAlPiUKICBtdXRhdGUoZXRobmljaXR5MiA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiLCIsIGV0aG5pY2l0eSksICJtdWx0aXBsZSIsIGV0aG5pY2l0eSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCI7IiwgZXRobmljaXR5KSwgIm11bHRpcGxlIiwgZXRobmljaXR5KSkpICU+JSAKICBtdXRhdGUoZXRobmljaXR5MyA9IGlmZWxzZShncmVwbCgib3RoZXIiLCBldGhuaWNpdHkyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIi8iLCBldGhuaWNpdHkyKSB8IGdyZXBsKCJtaXgiLCBldGhuaWNpdHkyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCJhc2lhbiIsIGV0aG5pY2l0eTIpIHwgZ3JlcGwoImtvcmVhbiIsIGV0aG5pY2l0eTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVhc3QgYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRobmljaXR5MikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aG5pY2l0eTIpKSAlPiUKICBjb3VudChhZ2VHcm91cCwgZXRobmljaXR5MykgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KGFnZUdyb3VwKSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBhcnJhbmdlKGFnZUdyb3VwLCBkZXNjKG4pKQpgYGAKCmBgYHtyIG1pc3NpbmcgZGF0YX0KIyBleHBlcmltaW5ldGVyIGVycm9yCmRfY2hpbGQwMSAlPiUgIyB1c2UgZF9jaGlsZDAxIChiZWZvcmUgZHJvcHBpbmcgbiA9IDEgY2hpbGQgaW4gImVsZXBoYW50IiBjb25kaXRpb24pCiAgZmlsdGVyKCEoY2hhcmFjdGVyICVpbiUgYygiYmVldGxlIiwgInJvYm90IikpKSAlPiUKICBzZWxlY3Qoc3ViaWQpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoKSAlPiUKICBtdXRhdGUocGVyY2VudCA9IG4vMjAwKQoKIyBpbmNvbXBsZXRlIHRyaWFscyAoInNraXAiLCAiYmFpbCIpCmQxICU+JSAjIHVzZSBkMSAoYmVmb3JlIGRyb3BwaW5nIHRyaWFscyB3aXRoIHJ0ID4gMjUwbXMpIAogIGNvdW50KGFnZUdyb3VwLCBzdWJpZCkgJT4lCiAgZmlsdGVyKG4gIT0gNDApICU+JQogIG11dGF0ZShuX21pc3NpbmcgPSA0MC1uKSAlPiUKICBncm91cF9ieShhZ2VHcm91cCkgJT4lCiAgc3VtbWFyaXNlKHN1bV9taXNzaW5nID0gc3VtKG5fbWlzc2luZykpICU+JQogIG11dGF0ZShwZXJjZW50ID0gc3VtX21pc3NpbmcvODAwMCkKCiMgdHJpYWxzIHdpdGggcnQgPiAyNTBtcwpkMSAlPiUKICBmaWx0ZXIocnQgPCAyNTApICU+JQogIGNvdW50KGFnZUdyb3VwKSAlPiUKICBtdXRhdGUocGVyY2VudCA9IG4vODAwMCkKCiMgYWxsIG1pc3NpbmcgdHJpYWxzCmQxICU+JSAjIHVzZSBkMSAoYmVmb3JlIGRyb3BwaW5nIHRyaWFscykgCiAgY291bnQoYWdlR3JvdXAsIHN1YmlkKSAlPiUKICBmaWx0ZXIobiAhPSA0MCkgJT4lCiAgbXV0YXRlKG5fTkEgPSA0MC1uKSAlPiUKICBncm91cF9ieShhZ2VHcm91cCkgJT4lCiAgc3VtbWFyaXNlKG5fTkEgPSBzdW0obl9OQSkpICU+JQogIG11dGF0ZShwZXJjZW50X05BID0gbl9OQS84MDAwKSAlPiUKICBmdWxsX2pvaW4oZDEgJT4lCiAgICAgICAgICAgICAgZmlsdGVyKHJ0IDwgMjUwKSAlPiUKICAgICAgICAgICAgICBjb3VudChhZ2VHcm91cCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKG5fZmFzdCA9IG4pICU+JQogICAgICAgICAgICAgIG11dGF0ZShwZXJjZW50X2Zhc3QgPSBuX2Zhc3QvODAwMCkpICU+JQogIG11dGF0ZShuX21pc3NpbmdfVE9UQUwgPSBuX05BICsgbl9mYXN0LAogICAgICAgICBwZXJjZW50X21pc3NpbmdfVE9UQUwgPSBwZXJjZW50X05BICsgcGVyY2VudF9mYXN0KQogIApgYGAKCiMgRGF0YSBwcmVwYXJhdGlvbgoKIyMgRmlsdGVyIFJUcwoKYGBge3IgZmlsdGVyIFJUcywgcHJlcCBkYXRhZnJhbWV9CiMgZXhhbWluZSBhbmQgZmlsdGVyIGJ5IFJUcwpnZ3Bsb3QoZDEpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeCA9IHJ0KSwgYmlucyA9IDEwMCkgKwogIGZhY2V0X3dyYXAofmFnZUdyb3VwKSArCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBzZXEoMCwgMTAwMCwgMTAwKSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDI1MCwgY29sb3IgPSAicmVkIikKCmQyIDwtIGQxICU+JQogIGZpbHRlcighKHJ0IDwgMjUwKSB8IGlzLm5hKHJ0KSkgIyBwcmVzZXQgY3JpdGVyaW9uIG9mIDI1MG1zCmBgYAoKIyMgTG9vayBhdCBob3ZlciB0aW1lCgpgYGB7ciBob3ZlciB0aW1lfQpkMiAlPiUKICBmaWx0ZXIoIShjYXBhY2l0eSAlaW4lIGMoInBlcnNvbmFsaXR5IiwgImJlbGllZnMiLCAicGxlYXN1cmUiLCAiZGVzaXJlcyIsICJzZWxmX3Jlc3RyYWludCIsICJnb2FscyIsICJuYXVzZWF0ZWQiKSkpICU+JQogIG11dGF0ZShub0hvdmVyID0gaG92ZXJUaW1lID09IDApICU+JQogIGNvdW50KGFnZUdyb3VwLCBub0hvdmVyKSAlPiUKICBncm91cF9ieShhZ2VHcm91cCkgJT4lCiAgbXV0YXRlKHBlcmNlbnQgPSBuL3N1bShuKSkKCmdncGxvdChkMiwgYWVzKHggPSBob3ZlclRpbWUpKSArCiAgZmFjZXRfZ3JpZCh+IGFnZUdyb3VwKSArCiAgZ2VvbV9oaXN0b2dyYW0oKQpgYGAKCiMjIFByZXBhcmUgZGF0YSBmb3IgRUZBCgpgYGB7ciBwcmVwIGZvciBlZmF9CiMgZmluaXNoIHRpZHlpbmcKZDMgPC0gZDIgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCByZXNwb25zZU51bSwgc3ViaWQpICU+JQogIHNwcmVhZChjYXBhY2l0eSwgcmVzcG9uc2VOdW0pCgojIG1ha2UgY29tYmluZWQgZGF0YXNldApkM19jb21iaW5lZCA8LSBkYXRhLmZyYW1lKGQzWywtMV0sIHJvdy5uYW1lcyA9IGQzWywxXSkKCiMgbWFrZSBzZXBhcmF0ZSBjaGlsZCBhbmQgYWR1bHQgZGF0YXNldHMKZDNfYWR1bHQgPC0gZDMgJT4lCiAgbGVmdF9qb2luKGQgJT4lIHNlbGVjdChzdWJpZCwgYWdlR3JvdXApKSAlPiUKICBmaWx0ZXIoYWdlR3JvdXAgPT0gImFkdWx0IikgJT4lCiAgc2VsZWN0KC1hZ2VHcm91cCkgJT4lCiAgZGlzdGluY3QoKQpkM19hZHVsdCA8LSBkYXRhLmZyYW1lKGQzX2FkdWx0WywtMV0sIHJvdy5uYW1lcyA9IGQzX2FkdWx0WywxXSkKCmQzX2NoaWxkIDwtIGQzICU+JQogIGxlZnRfam9pbihkICU+JSBzZWxlY3Qoc3ViaWQsIGFnZUdyb3VwKSkgJT4lCiAgZmlsdGVyKGFnZUdyb3VwID09ICJjaGlsZCIpICU+JQogIHNlbGVjdCgtYWdlR3JvdXApICU+JQogIGRpc3RpbmN0KCkKZDNfY2hpbGQgPC0gZGF0YS5mcmFtZShkM19jaGlsZFssLTFdLCByb3cubmFtZXMgPSBkM19jaGlsZFssMV0pCmBgYAoKIyMgR2VuZXJhbCBhbmFseXNpcyBzZXR0aW5ncwoKYGBge3IgYW5hbHlzaXMgc2V0dGluZ3N9CiMgc2V0IGNvcnJlbGF0aW9uIHR5cGU6IHBlYXJzb24gb3IgcG9seWNob3JpYz8KY29yX3R5cGUgPC0gImNvciIKIyBjb3JfdHlwZSA8LSAicG9seSIKCiMgc2V0IHJvdGF0aW9uIHR5cGU6IHZhcmltYXggb3Igb2JsaW1pbj8KIyByb3RfdHlwZSA8LSAidmFyaW1heCIKcm90X3R5cGUgPC0gIm9ibGltaW4iCgojIHNldCBzY29yZSB0eXBlCiMgc2NvcmVfdHlwZSA8LSAicmVncmVzc2lvbiIKc2NvcmVfdHlwZSA8LSAiVGh1cnN0b25lIgojIHNjb3JlX3R5cGUgPC0gInRlbkJlcmdlIgojIHNjb3JlX3R5cGUgPC0gIkFuZGVyc29uIgojIHNjb3JlX3R5cGUgPC0gIkJhcnRsZXR0IgojIHNjb3JlX3R5cGUgPC0gIkhhcm1hbiIKYGBgCgojIEFkdWx0cyBhbG9uZQoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSB1bnJvdGF0ZWQgc29sdXRpb24KCmBgYHtyIGVmYSBhZHVsdHMgbWF4aW1hbCB1bnJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9hZHVsdF9tYXhfdW5yb3QgPC0gZmEoZDNfYWR1bHQsIG5mYWN0b3JzID0gMTMsIHJvdGF0ZSA9ICJub25lIiwgY29yID0gY29yX3R5cGUpCmVmYV9hZHVsdF9tYXhfdW5yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9hZHVsdF9tYXhfdW5yb3RfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2FkdWx0X21heF91bnJvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9hZHVsdF9tYXhfdW5yb3RfbmZhY3RvcnMgPC0gZWZhX2FkdWx0X21heF91bnJvdF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9hZHVsdF9tYXhfdW5yb3RfbmZhY3RvcnMKCiMgbWFudWFsbHkgY2hlY2sgdGhhdCBlYWNoIGZhY3RvciBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2FkdWx0X21heF91bnJvdF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9hZHVsdF9tYXhfdW5yb3QpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzZWxlY3QoMTplZmFfYWR1bHRfbWF4X3Vucm90X25mYWN0b3JzKSAlPiUKICByZW5hbWUoRjEgPSBNUjEsIEYyID0gTVIyLCBGMyA9IE1SMywgRjQgPSBNUjQpICU+JSAjIGFkanVzdCBieSBoYW5kIGFzIG5lZWRlZAogIG11dGF0ZShGMV9hYnMgPSBhYnMoRjEpLAogICAgICAgICBGMl9hYnMgPSBhYnMoRjIpLAogICAgICAgICBGM19hYnMgPSBhYnMoRjMpLAogICAgICAgICBGNF9hYnMgPSBhYnMoRjQpLAogICAgICAgICBsb2FkaW5nX2FicyA9IHBtYXgoRjFfYWJzLCBGMl9hYnMsIEYzX2FicywgRjRfYWJzKSwKICAgICAgICAgbG9hZGluZyA9IGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjEpLCBGMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZ19hYnMgPT0gYWJzKEYyKSwgRjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjMpLCBGMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjQpLCBGNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEY0LCAiRjQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjQsICJGYWN0b3IgNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpKQoKZWZhX2FkdWx0X21heF91bnJvdF9sb2FkaW5ncyAlPiUgY291bnQoZmFjdG9yTmFtZSkgIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCgojIHJlc2V0IGFzIG5lZWRlZAplZmFfYWR1bHRfbWF4X3Vucm90X25mYWN0b3JzIDwtIGVmYV9hZHVsdF9tYXhfdW5yb3RfbG9hZGluZ3MgJT4lIGNvdW50KGZhY3Rvck5hbWUpICU+JSBucm93KCkKYGBgCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgYWR1bHRzIG1heGltYWwgcm90YXRlZH0KIyBkbyBmYWN0b3IgYW5hbHlzaXMKZWZhX2FkdWx0X21heF9yb3QgPC0gZmEoZDNfYWR1bHQsIG5mYWN0b3JzID0gMTMsIHJvdGF0ZSA9IHJvdF90eXBlLCBjb3IgPSBjb3JfdHlwZSkKZWZhX2FkdWx0X21heF9yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9hZHVsdF9tYXhfcm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9hZHVsdF9tYXhfcm90KSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKZWZhX2FkdWx0X21heF9yb3RfZWlnZW52YWx1ZXMKCiMgYnV0IHNlZSBodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Bvc3QvSG93X3RvX2NhbGN1bGF0ZV90aGVfZXhwbGFpbmVkX3ZhcmlhbmNlX3Blcl9mYWN0b3JfaW5fYV9wcmluY2lwYWxfYXhpc19mYWN0b3JfYW5hbHlzaXMgaWYgcm90YXRpb24gIT0gInZhcmltYXgiCiMgdGFrZWF3YXk6IHVzZSAiUHJvcG9ydGlvbi5WYXIiIGluc3RlYWQgb2YgIlByb3BvcnRpb24uRXhwbGFpbmVkIgpgYGAKCiMjIyBTbWFsbCByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgYWR1bHRzIHNtYWxsIHJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9hZHVsdF9zbWFsbF9yb3QgPC0gZmEoZDNfYWR1bHQsIG5mYWN0b3JzID0gZWZhX2FkdWx0X21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsIGNvciA9IGNvcl90eXBlKQplZmFfYWR1bHRfc21hbGxfcm90CgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfYWR1bHRfc21hbGxfcm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9hZHVsdF9zbWFsbF9yb3QpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQplZmFfYWR1bHRfc21hbGxfcm90X2VpZ2VudmFsdWVzCgojIGJ1dCBzZWUgaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wb3N0L0hvd190b19jYWxjdWxhdGVfdGhlX2V4cGxhaW5lZF92YXJpYW5jZV9wZXJfZmFjdG9yX2luX2FfcHJpbmNpcGFsX2F4aXNfZmFjdG9yX2FuYWx5c2lzIGlmIHJvdGF0aW9uICE9ICJ2YXJpbWF4IgojIHRha2Vhd2F5OiB1c2UgIlByb3BvcnRpb24uVmFyIiBpbnN0ZWFkIG9mICJQcm9wb3J0aW9uLkV4cGxhaW5lZCIKYGBgCgojIyMjIExvYWRpbmdzCgpgYGB7ciBlZmEgYWR1bHRzIHNtYWxsIHJvdGF0ZWQgbG9hZGluZ3N9CiMgbWFrZSBkYXRhZnJhbWUgZm9yIGFsbCBmYWN0b3IgbG9hZGluZ3MgYW5kIGRvbWluYW50IGZhY3RvcgplZmFfYWR1bHRfc21hbGxfcm90X2xvYWRpbmdzIDwtIGVmYV9hZHVsdF9zbWFsbF9yb3QkbG9hZGluZ3NbXSAlPiUKICBmYS5zb3J0KCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUoRjEgPSBNUjEsIEYyID0gTVIyLCBGMyA9IE1SMykgJT4lICMgYWRqdXN0IGJ5IGhhbmQgYXMgbmVlZGVkCiAgbXV0YXRlKEYxX2FicyA9IGFicyhGMSksCiAgICAgICAgIEYyX2FicyA9IGFicyhGMiksCiAgICAgICAgIEYzX2FicyA9IGFicyhGMyksCiAgICAgICAgIGxvYWRpbmdfYWJzID0gcG1heChGMV9hYnMsIEYyX2FicywgRjNfYWJzKSwKICAgICAgICAgbG9hZGluZyA9IGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjEpLCBGMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZ19hYnMgPT0gYWJzKEYyKSwgRjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjMpLCBGMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3IgPSBpZmVsc2UobG9hZGluZyA9PSBGMSwgIkYxIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgICAgICAgZmFjdG9yTmFtZSA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRmFjdG9yIDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRmFjdG9yIDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZyA9PSBGMywgIkZhY3RvciAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSAlPiUKICBzZWxlY3QoY2FwYWNpdHksIEYxLCBGMiwgRjMsIGZhY3RvciwgZmFjdG9yTmFtZSwgbG9hZGluZywgbG9hZGluZ19hYnMpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZnVsbF9qb2luKGQgJT4lIHNlbGVjdChjYXBhY2l0eSwgY2FwV29yZGluZykpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nID0gZ3N1YigiXFwgIiwgIl8iLCBnc3ViKCIgLS0uKiIsICIiLCBjYXBXb3JkaW5nKSkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgY2FwV29yZGluZywgRjE6bG9hZGluZ19hYnMpICU+JQogIGRpc3RpbmN0KCkKCiMgcHJpbnQgb3V0IGxpc3Qgb2YgaXRlbXMgYnkgZG9taW5hbnQgZmFjdG9yCmVmYV9hZHVsdF9zbWFsbF9yb3RfaXRlbXMgPC0gZWZhX2FkdWx0X3NtYWxsX3JvdF9sb2FkaW5ncyAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nX2FicykpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nUGx1cyA9IGlmZWxzZShsb2FkaW5nID4gMCwgY2FwV29yZGluZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChjYXBXb3JkaW5nLCAiIChuZWdhdGl2ZSBsb2FkaW5nKSIpKSkgJT4lCiAgZ3JvdXBfYnkoZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UoaXRlbXMgPSBnc3ViKCJfIiwgIiAiLCBwYXN0ZShjYXBXb3JkaW5nUGx1cywgY29sbGFwc2UgPSAiLCAiKSkpCmhlYWQoZWZhX2FkdWx0X3NtYWxsX3JvdF9pdGVtcyRpdGVtcywgNDApCmBgYAoKIyBDaGlsZHJlbiBhbG9uZQoKIyMgRXhwbG9yYXRvcnkgZmFjdG9yIGFuYWx5c2lzCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSB1bnJvdGF0ZWQgc29sdXRpb24KCmBgYHtyIGVmYSBjaGlsZHJlbiBtYXhpbWFsIHVucm90YXRlZH0KIyBkbyBmYWN0b3IgYW5hbHlzaXMKZWZhX2NoaWxkX21heF91bnJvdCA8LSBmYShkM19jaGlsZCwgbmZhY3RvcnMgPSAxMywgcm90YXRlID0gIm5vbmUiLCBjb3IgPSBjb3JfdHlwZSkKZWZhX2NoaWxkX21heF91bnJvdAoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2NoaWxkX21heF91bnJvdF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfY2hpbGRfbWF4X3Vucm90KSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2NoaWxkX21heF91bnJvdF9uZmFjdG9ycyA8LSBlZmFfY2hpbGRfbWF4X3Vucm90X2VpZ2VudmFsdWVzICU+JQogIGZpbHRlcihTUy5sb2FkaW5ncyA+IDEsIFByb3BvcnRpb24uRXhwbGFpbmVkID4gMC4wNSkgJT4lCiAgY291bnQoKSAlPiUKICBhcy5udW1lcmljKCkKZWZhX2NoaWxkX21heF91bnJvdF9uZmFjdG9ycwoKIyBtYW51YWxseSBjaGVjayB0aGF0IGVhY2ggZmFjdG9yIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfY2hpbGRfbWF4X3Vucm90X2xvYWRpbmdzIDwtIGZhLnNvcnQobG9hZGluZ3MoZWZhX2NoaWxkX21heF91bnJvdClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHNlbGVjdCgxOmVmYV9jaGlsZF9tYXhfdW5yb3RfbmZhY3RvcnMpICU+JQogIHJlbmFtZShGMSA9IE1SMSwgRjIgPSBNUjIsIEYzID0gTVIzKSAlPiUgIyBhZGp1c3QgYnkgaGFuZCBhcyBuZWVkZWQKICBtdXRhdGUoRjFfYWJzID0gYWJzKEYxKSwKICAgICAgICAgRjJfYWJzID0gYWJzKEYyKSwKICAgICAgICAgRjNfYWJzID0gYWJzKEYzKSwKICAgICAgICAgbG9hZGluZ19hYnMgPSBwbWF4KEYxX2FicywgRjJfYWJzLCBGM19hYnMpLAogICAgICAgICBsb2FkaW5nID0gaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMSksIEYxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjIpLCBGMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMyksIEYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpCgplZmFfY2hpbGRfbWF4X3Vucm90X2xvYWRpbmdzICU+JSBjb3VudChmYWN0b3JOYW1lKSAjIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKCiMgcmVzZXQgYXMgbmVlZGVkCmVmYV9jaGlsZF9tYXhfdW5yb3RfbmZhY3RvcnMgPC0gZWZhX2NoaWxkX21heF91bnJvdF9sb2FkaW5ncyAlPiUgY291bnQoZmFjdG9yTmFtZSkgJT4lIG5yb3coKQpgYGAKCiMjIyBNYXhpbWFsICgxMy1mYWN0b3IpIHJvdGF0ZWQgc29sdXRpb24KCmBgYHtyIGVmYSBjaGlsZHJlbiBtYXhpbWFsIHJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9jaGlsZF9tYXhfcm90IDwtIGZhKGQzX2NoaWxkLCBuZmFjdG9ycyA9IDEzLCByb3RhdGUgPSByb3RfdHlwZSwgY29yID0gY29yX3R5cGUpCmVmYV9jaGlsZF9tYXhfcm90CgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfY2hpbGRfbWF4X3JvdF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfY2hpbGRfbWF4X3JvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCmVmYV9jaGlsZF9tYXhfcm90X2VpZ2VudmFsdWVzCgojIGJ1dCBzZWUgaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wb3N0L0hvd190b19jYWxjdWxhdGVfdGhlX2V4cGxhaW5lZF92YXJpYW5jZV9wZXJfZmFjdG9yX2luX2FfcHJpbmNpcGFsX2F4aXNfZmFjdG9yX2FuYWx5c2lzIGlmIHJvdGF0aW9uICE9ICJ2YXJpbWF4IgojIHRha2Vhd2F5OiB1c2UgIlByb3BvcnRpb24uVmFyIiBpbnN0ZWFkIG9mICJQcm9wb3J0aW9uLkV4cGxhaW5lZCIKYGBgCgojIyMgU21hbGwgcm90YXRlZCBzb2x1dGlvbgoKYGBge3IgZWZhIGNoaWxkcmVuIHNtYWxsIHJvdGF0ZWR9CiMgZG8gZmFjdG9yIGFuYWx5c2lzCmVmYV9jaGlsZF9zbWFsbF9yb3QgPC0gZmEoZDNfY2hpbGQsIG5mYWN0b3JzID0gZWZhX2NoaWxkX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsIGNvciA9IGNvcl90eXBlKQplZmFfY2hpbGRfc21hbGxfcm90CgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfY2hpbGRfc21hbGxfcm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9jaGlsZF9zbWFsbF9yb3QpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQplZmFfY2hpbGRfc21hbGxfcm90X2VpZ2VudmFsdWVzCgojIGJ1dCBzZWUgaHR0cHM6Ly93d3cucmVzZWFyY2hnYXRlLm5ldC9wb3N0L0hvd190b19jYWxjdWxhdGVfdGhlX2V4cGxhaW5lZF92YXJpYW5jZV9wZXJfZmFjdG9yX2luX2FfcHJpbmNpcGFsX2F4aXNfZmFjdG9yX2FuYWx5c2lzIGlmIHJvdGF0aW9uICE9ICJ2YXJpbWF4IgojIHRha2Vhd2F5OiB1c2UgIlByb3BvcnRpb24uVmFyIiBpbnN0ZWFkIG9mICJQcm9wb3J0aW9uLkV4cGxhaW5lZCIKYGBgCgojIyMjIExvYWRpbmdzCgpgYGB7ciBlZmEgY2hpbGRyZW4gc21hbGwgcm90YXRlZCBsb2FkaW5nc30KIyBtYWtlIGRhdGFmcmFtZSBmb3IgYWxsIGZhY3RvciBsb2FkaW5ncyBhbmQgZG9taW5hbnQgZmFjdG9yCmVmYV9jaGlsZF9zbWFsbF9yb3RfbG9hZGluZ3MgPC0gZWZhX2NoaWxkX3NtYWxsX3JvdCRsb2FkaW5nc1tdICU+JQogIGZhLnNvcnQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShGMSA9IE1SMSwgRjIgPSBNUjIsIEYzID0gTVIzKSAlPiUgIyBhZGp1c3QgYnkgaGFuZCBhcyBuZWVkZWQKICBtdXRhdGUoRjFfYWJzID0gYWJzKEYxKSwKICAgICAgICAgRjJfYWJzID0gYWJzKEYyKSwKICAgICAgICAgRjNfYWJzID0gYWJzKEYzKSwKICAgICAgICAgbG9hZGluZ19hYnMgPSBwbWF4KEYxX2FicywgRjJfYWJzLCBGM19hYnMpLAogICAgICAgICBsb2FkaW5nID0gaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMSksIEYxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjIpLCBGMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMyksIEYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgRjEsIEYyLCBGMywgZmFjdG9yLCBmYWN0b3JOYW1lLCBsb2FkaW5nLCBsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmdWxsX2pvaW4oZCAlPiUgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmcgPSBnc3ViKCJcXCAiLCAiXyIsIGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpKSkgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nLCBGMTpsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKQoKIyBwcmludCBvdXQgbGlzdCBvZiBpdGVtcyBieSBkb21pbmFudCBmYWN0b3IKZWZhX2NoaWxkX3NtYWxsX3JvdF9pdGVtcyA8LSBlZmFfY2hpbGRfc21hbGxfcm90X2xvYWRpbmdzICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGxvYWRpbmdfYWJzKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmdQbHVzID0gaWZlbHNlKGxvYWRpbmcgPiAwLCBjYXBXb3JkaW5nLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKGNhcFdvcmRpbmcsICIgKG5lZ2F0aXZlIGxvYWRpbmcpIikpKSAlPiUKICBncm91cF9ieShmYWN0b3IpICU+JQogIHN1bW1hcmlzZShpdGVtcyA9IGdzdWIoIl8iLCAiICIsIHBhc3RlKGNhcFdvcmRpbmdQbHVzLCBjb2xsYXBzZSA9ICIsICIpKSkKaGVhZChlZmFfY2hpbGRfc21hbGxfcm90X2l0ZW1zJGl0ZW1zLCA0MCkKYGBgCgojIENvbWJpbmVkIGRhdGFzZXQ6IENoaWxkcmVuICYgYWR1bHRzCgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCiMjIyBNYXhpbWFsICgxMy1mYWN0b3IpIHVucm90YXRlZCBzb2x1dGlvbgoKYGBge3IgZWZhIGNvbWJpbmVkIG1heGltYWwgdW5yb3RhdGVkfQojIGRvIGZhY3RvciBhbmFseXNpcwplZmFfY29tYl9tYXhfdW5yb3QgPC0gZmEoZDNfY29tYmluZWQsIG5mYWN0b3JzID0gMTMsIHJvdGF0ZSA9ICJub25lIiwgY29yID0gY29yX3R5cGUpCmVmYV9jb21iX21heF91bnJvdAoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2NvbWJfbWF4X3Vucm90X2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9jb21iX21heF91bnJvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycyA8LSBlZmFfY29tYl9tYXhfdW5yb3RfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfY29tYl9tYXhfdW5yb3RfbmZhY3RvcnMKCiMgbWFudWFsbHkgY2hlY2sgdGhhdCBlYWNoIGZhY3RvciBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2NvbWJfbWF4X3Vucm90X2xvYWRpbmdzIDwtIGZhLnNvcnQobG9hZGluZ3MoZWZhX2NvbWJfbWF4X3Vucm90KVtdKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgc2VsZWN0KDE6ZWZhX2NvbWJfbWF4X3Vucm90X25mYWN0b3JzKSAlPiUKICByZW5hbWUoRjEgPSBNUjEsIEYyID0gTVIyLCBGMyA9IE1SMykgJT4lICMgYWRqdXN0IGJ5IGhhbmQgYXMgbmVlZGVkCiAgbXV0YXRlKEYxX2FicyA9IGFicyhGMSksCiAgICAgICAgIEYyX2FicyA9IGFicyhGMiksCiAgICAgICAgIEYzX2FicyA9IGFicyhGMyksCiAgICAgICAgIGxvYWRpbmdfYWJzID0gcG1heChGMV9hYnMsIEYyX2FicywgRjNfYWJzKSwKICAgICAgICAgbG9hZGluZyA9IGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjEpLCBGMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZ19hYnMgPT0gYWJzKEYyKSwgRjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjMpLCBGMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3IgPSBpZmVsc2UobG9hZGluZyA9PSBGMSwgIkYxIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgICAgICAgZmFjdG9yTmFtZSA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRmFjdG9yIDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYyLCAiRmFjdG9yIDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobG9hZGluZyA9PSBGMywgIkZhY3RvciAzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKQoKZWZhX2NvbWJfbWF4X3Vucm90X2xvYWRpbmdzICU+JSBjb3VudChmYWN0b3JOYW1lKSAjIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKYGBgCgojIyMgTWF4aW1hbCAoMTMtZmFjdG9yKSByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgY29tYmluZWQgbWF4aW1hbCByb3RhdGVkfQojIGRvIGZhY3RvciBhbmFseXNpcwplZmFfY29tYl9tYXhfcm90IDwtIGZhKGQzX2NvbWJpbmVkLCBuZmFjdG9ycyA9IDEzLCByb3RhdGUgPSByb3RfdHlwZSwgY29yID0gY29yX3R5cGUpCmVmYV9jb21iX21heF9yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9jb21iX21heF9yb3RfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2NvbWJfbWF4X3JvdCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCmVmYV9jb21iX21heF9yb3RfZWlnZW52YWx1ZXMKCiMgYnV0IHNlZSBodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Bvc3QvSG93X3RvX2NhbGN1bGF0ZV90aGVfZXhwbGFpbmVkX3ZhcmlhbmNlX3Blcl9mYWN0b3JfaW5fYV9wcmluY2lwYWxfYXhpc19mYWN0b3JfYW5hbHlzaXMgaWYgcm90YXRpb24gIT0gInZhcmltYXgiCiMgdGFrZWF3YXk6IHVzZSAiUHJvcG9ydGlvbi5WYXIiIGluc3RlYWQgb2YgIlByb3BvcnRpb24uRXhwbGFpbmVkIgpgYGAKCiMjIyBTbWFsbCByb3RhdGVkIHNvbHV0aW9uCgpgYGB7ciBlZmEgY29tYmluZWQgc21hbGwgcm90YXRlZH0KIyBkbyBmYWN0b3IgYW5hbHlzaXMKZWZhX2NvbWJfc21hbGxfcm90IDwtIGZhKGQzX2NvbWJpbmVkLCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsIGNvciA9IGNvcl90eXBlKQplZmFfY29tYl9zbWFsbF9yb3QKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9jb21iX3NtYWxsX3JvdF9laWdlbnZhbHVlcyA8LSBwcmludChlZmFfY29tYl9zbWFsbF9yb3QpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQplZmFfY29tYl9zbWFsbF9yb3RfZWlnZW52YWx1ZXMKCiMgYnV0IHNlZSBodHRwczovL3d3dy5yZXNlYXJjaGdhdGUubmV0L3Bvc3QvSG93X3RvX2NhbGN1bGF0ZV90aGVfZXhwbGFpbmVkX3ZhcmlhbmNlX3Blcl9mYWN0b3JfaW5fYV9wcmluY2lwYWxfYXhpc19mYWN0b3JfYW5hbHlzaXMgaWYgcm90YXRpb24gIT0gInZhcmltYXgiCiMgdGFrZWF3YXk6IHVzZSAiUHJvcG9ydGlvbi5WYXIiIGluc3RlYWQgb2YgIlByb3BvcnRpb24uRXhwbGFpbmVkIgpgYGAKCiMjIyMgTG9hZGluZ3MKCmBgYHtyIGVmYSBjb21iaW5lZCBzbWFsbCByb3RhdGVkIGxvYWRpbmdzfQojIG1ha2UgZGF0YWZyYW1lIGZvciBhbGwgZmFjdG9yIGxvYWRpbmdzIGFuZCBkb21pbmFudCBmYWN0b3IKZWZhX2NvbWJfc21hbGxfcm90X2xvYWRpbmdzIDwtIGVmYV9jb21iX3NtYWxsX3JvdCRsb2FkaW5nc1tdICU+JQogIGZhLnNvcnQoKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShGMSA9IE1SMSwgRjIgPSBNUjIsIEYzID0gTVIzKSAlPiUgIyBhZGp1c3QgYnkgaGFuZCBhcyBuZWVkZWQKICBtdXRhdGUoRjFfYWJzID0gYWJzKEYxKSwKICAgICAgICAgRjJfYWJzID0gYWJzKEYyKSwKICAgICAgICAgRjNfYWJzID0gYWJzKEYzKSwKICAgICAgICAgbG9hZGluZ19hYnMgPSBwbWF4KEYxX2FicywgRjJfYWJzLCBGM19hYnMpLAogICAgICAgICBsb2FkaW5nID0gaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMSksIEYxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nX2FicyA9PSBhYnMoRjIpLCBGMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmdfYWJzID09IGFicyhGMyksIEYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgIGZhY3RvciA9IGlmZWxzZShsb2FkaW5nID09IEYxLCAiRjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjMsICJGMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICBmYWN0b3JOYW1lID0gaWZlbHNlKGxvYWRpbmcgPT0gRjEsICJGYWN0b3IgMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxvYWRpbmcgPT0gRjIsICJGYWN0b3IgMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsb2FkaW5nID09IEYzLCAiRmFjdG9yIDMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgRjEsIEYyLCBGMywgZmFjdG9yLCBmYWN0b3JOYW1lLCBsb2FkaW5nLCBsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBmdWxsX2pvaW4oZCAlPiUgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmcgPSBnc3ViKCJcXCAiLCAiXyIsIGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpKSkgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nLCBGMTpsb2FkaW5nX2FicykgJT4lCiAgZGlzdGluY3QoKQoKIyBwcmludCBvdXQgbGlzdCBvZiBpdGVtcyBieSBkb21pbmFudCBmYWN0b3IKZWZhX2NvbWJfc21hbGxfcm90X2l0ZW1zIDwtIGVmYV9jb21iX3NtYWxsX3JvdF9sb2FkaW5ncyAlPiUKICBhcnJhbmdlKGZhY3RvciwgZGVzYyhsb2FkaW5nX2FicykpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nUGx1cyA9IGlmZWxzZShsb2FkaW5nID4gMCwgY2FwV29yZGluZywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlMChjYXBXb3JkaW5nLCAiIChuZWdhdGl2ZSBsb2FkaW5nKSIpKSkgJT4lCiAgZ3JvdXBfYnkoZmFjdG9yKSAlPiUKICBzdW1tYXJpc2UoaXRlbXMgPSBnc3ViKCJfIiwgIiAiLCBwYXN0ZShjYXBXb3JkaW5nUGx1cywgY29sbGFwc2UgPSAiLCAiKSkpCmhlYWQoZWZhX2NvbWJfc21hbGxfcm90X2l0ZW1zJGl0ZW1zLCA0MCkKYGBgCgojIFJlZ3Jlc3Npb24gb24gZmFjdG9yIHNjb3JlcwoKIyMgQ2hpbGRyZW4gdnMuIGFkdWx0cwoKYGBge3IgcmVncmVzc2lvbiBhZ2UgZ3JvdXAgZGF0YSBwcmVwfQpzY29yZXNfYWxsIDwtIGZhKGQzX2NvbWJpbmVkLCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsCiAgICAgICAgICAgICAgICAgY29yID0gY29yX3R5cGUsIHNjb3JlcyA9IHNjb3JlX3R5cGUpJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VHcm91cCA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoInJ1biIsIHN1YmlkKSwgImFkdWx0IiwgImNoaWxkIikpKQoKY29sbmFtZXMoc2NvcmVzX2FsbClbMjo0XSA8LSBjKCJzY29yZV9GMSIsICJzY29yZV9GMiIsICJzY29yZV9GMyIpCmBgYAoKYGBge3IgcmVncmVzc2lvbiBhZ2UgZ3JvdXAgYW5hbHlzaXN9CiMgYW5hbHl6ZQpzY29yZXNfYWxsX2FuYWx5c2lzIDwtIGQgJT4lCiAgc2VsZWN0KHN1YmlkLCBhZ2VHcm91cCwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGxlZnRfam9pbihzY29yZXNfYWxsKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpICYgIWlzLm5hKHNjb3JlX0YyKSAmICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2VHcm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkKCiMgc2V0IGNvbnRyYXN0cwpjb250cmFzdHMoc2NvcmVzX2FsbF9hbmFseXNpcyRmYWN0b3IpIDwtIGNiaW5kKEYxID0gYygxLCAtMSwgMCksICMgTUFLRSBTVVJFIFRPIERPVUJMRS1DSEVDSyEhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjMgPSBjKDAsIC0xLCAxKSkKY29udHJhc3RzKHNjb3Jlc19hbGxfYW5hbHlzaXMkY2hhcmFjdGVyKSA8LSBjYmluZChyb2JvdCA9IGMoLTEsIDEpKQpjb250cmFzdHMoc2NvcmVzX2FsbF9hbmFseXNpcyRhZ2VHcm91cCkgPC0gY2JpbmQoY2hpbGQgPSBjKC0xLCAxKSkKCnIxIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FsbF9hbmFseXNpcykKcjIgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIGFnZUdyb3VwICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hbGxfYW5hbHlzaXMpCnIzIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBhZ2VHcm91cCArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzKQphbm92YShyMSwgcjIsIHIzKQojIHN1bW1hcnkocjEpCiMgc3VtbWFyeShyMikKc3VtbWFyeShyMykKCnJvdW5kKHNpZ25pZihzdW1tYXJ5KHIzKSRjb2VmZmljaWVudHMsIDMpLCAyKSAlPiUgZGF0YS5mcmFtZSgpICMgJT4lIFZpZXcoKQoKIyBzdGVwd2lzZSByZWdyZXNzaW9uCmRyb3AxKHIzLCB0ZXN0ID0gIkNoaXNxIikKcjNfc3RlcDIgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIGFnZUdyb3VwICsgY2hhcmFjdGVyOmFnZUdyb3VwICsgZmFjdG9yOmFnZUdyb3VwICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hbGxfYW5hbHlzaXMpCmRyb3AxKHIzX3N0ZXAyLCB0ZXN0ID0gIkNoaXNxIikKcjNfc3RlcDMgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIGFnZUdyb3VwICsgZmFjdG9yOmFnZUdyb3VwICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hbGxfYW5hbHlzaXMpCmRyb3AxKHIzX3N0ZXAzLCB0ZXN0ID0gIkNoaXNxIikKCiMgIyByb2JvdCBvbmx5CiMgcm9ib3RfcjEgPC0gbG1lcihzY29yZSB+IGZhY3RvciArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIHJvYm90X3IyIDwtIGxtZXIoc2NvcmUgfiBmYWN0b3IgKyBhZ2VHcm91cCArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIHJvYm90X3IzIDwtIGxtZXIoc2NvcmUgfiBmYWN0b3IgKiBhZ2VHcm91cCArICgxIHwgc3ViaWQpLCBzY29yZXNfYWxsX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIGFub3ZhKHJvYm90X3IxLCByb2JvdF9yMiwgcm9ib3RfcjMpCiMgIyBzdW1tYXJ5KHJvYm90X3IxKQojICMgc3VtbWFyeShyb2JvdF9yMikKIyBzdW1tYXJ5KHJvYm90X3IzKQpgYGAKCmBgYHtyIHJlZ3Jlc3Npb24gYWdlIGdyb3VwIHBsb3R9CnNjb3Jlc19hbGxfcGxvdHRpbmcgPC0gZCAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZUdyb3VwLCBjaGFyYWN0ZXIpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZnVsbF9qb2luKHNjb3Jlc19hbGwpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShzY29yZV9GMSksICFpcy5uYShzY29yZV9GMiksICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2VHcm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAic2NvcmUiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJhZ2VHcm91cCIsICJjaGFyYWN0ZXIiLCAiZmFjdG9yIiksCiAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKCiMgcGxvdApnZ3Bsb3Qoc2NvcmVzX2FsbF9wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSwKICAgICAgICAgICAgICAgIGFnZUdyb3VwID0gZmFjdG9yKGFnZUdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2hpbGQiLCAiYWR1bHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNoaWxkcmVuIiwgImFkdWx0cyIpKSksCiAgICAgICBhZXMoeCA9IGFnZUdyb3VwLCB5ID0gbWVhbiwgY29sb3IgPSBjaGFyYWN0ZXIsIHNoYXBlID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAoImZhY3RvciIsIG5jb2wgPSAzKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ2VvbV9wb2ludChzaXplID0gNSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgd2lkdGggPSAwLjIsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjQpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTksIDE1KSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcyBieSBhZ2UgZ3JvdXAiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJBZHVsdHMgKFN0dWR5IDEpIHZzLiBjaGlsZHJlbiAoU3R1ZHkgMilcbiIsCiAgICAgICB4ID0gIkFnZSBncm91cCIsCiAgICAgICB5ID0gIk1lYW4gZmFjdG9yIHNjb3JlIikgIyAxMDAwIGJ5IDUwMApgYGAKCiMjIENoaWxkcmVuIGJ5IGFnZSBhdCB0ZXN0CgpgYGB7ciByZWdyZXNzaW9uIGFnZSBhdCB0ZXN0IGRhdGEgcHJlcH0Kc2NvcmVzX2NoaWxkcmVuIDwtIGZhKGQzX2NoaWxkLCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsCiAgICAgICAgICAgICAgICAgY29yID0gY29yX3R5cGUsIHNjb3JlcyA9IHNjb3JlX3R5cGUpJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VHcm91cCA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoInJ1biIsIHN1YmlkKSwgImFkdWx0IiwgImNoaWxkIikpKQoKY29sbmFtZXMoc2NvcmVzX2NoaWxkcmVuKVsyOjRdIDwtIGMoInNjb3JlX0YxIiwgInNjb3JlX0YyIiwgInNjb3JlX0YzIikKYGBgCgpgYGB7ciByZWdyZXNzaW9uIGFnZSBhdCB0ZXN0IGFuYWx5c2lzfQojIGFuYWx5emUKc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzIDwtIGQgJT4lCiAgc2VsZWN0KHN1YmlkLCBhZ2UsIGNoYXJhY3RlcikgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBsZWZ0X2pvaW4oc2NvcmVzX2NoaWxkcmVuKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpICYgIWlzLm5hKHNjb3JlX0YyKSAmICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2VHcm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkKCiMgc2V0IGNvbnRyYXN0cwpjb250cmFzdHMoc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzJGZhY3RvcikgPC0gY2JpbmQoRjEgPSBjKDEsIC0xLCAwKSwgIyBNQUtFIFNVUkUgVE8gRE9VQkxFLUNIRUNLISEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGMyA9IGMoMCwgLTEsIDEpKQpjb250cmFzdHMoc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzJGNoYXJhY3RlcikgPC0gY2JpbmQocm9ib3QgPSBjKC0xLCAxKSkKCnI0IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQpyNSA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICsgc2NhbGUoYWdlKSArICgxIHwgc3ViaWQpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMpCnI2IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBzY2FsZShhZ2UpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19jaGlsZHJlbl9hbmFseXNpcykKYW5vdmEocjQsIHI1LCByNikKIyBzdW1tYXJ5KHI0KQojIHN1bW1hcnkocjUpCnN1bW1hcnkocjYpCgojIHN0ZXB3aXNlIHJlZ3Jlc3Npb24KZHJvcDEocjYsIHRlc3QgPSAiQ2hpc3EiKQpyNl9zdGVwMiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICsgc2NhbGUoYWdlKSArIGNoYXJhY3RlcjpzY2FsZShhZ2UpICsgZmFjdG9yOnNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQpkcm9wMShyNl9zdGVwMiwgdGVzdCA9ICJDaGlzcSIpCnN1bW1hcnkocjZfc3RlcDIpCgojIGV4cGxvcmUgcG9seW5vaWFsIGVmZmVjdHMgb2YgYWdlCnI2YiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogcG9seShhZ2UsIDEpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19jaGlsZHJlbl9hbmFseXNpcykKcjcgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIHBvbHkoYWdlLCAyKSArICgxIHwgc3ViaWQpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMpCnI4IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQphbm92YShyNmIsIHI3LCByOCkKIyBzdW1tYXJ5KHI2YikKIyBzdW1tYXJ5KHI3KQpzdW1tYXJ5KHI4KQoKcm91bmQoc2lnbmlmKHN1bW1hcnkocjYpJGNvZWZmaWNpZW50cywgMyksIDIpICU+JSBkYXRhLmZyYW1lKCkgIyAlPiUgVmlldygpCgojIHN0ZXB3aXNlIHJlZ3Jlc3Npb24KZHJvcDEocjgsIHRlc3QgPSAiQ2hpc3EiKQpyOF9zdGVwMiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogcG9seShhZ2UsIDIpICsgcG9seShhZ2UsIDMpICsgcG9seShhZ2UsIDMpOmNoYXJhY3RlciArIHBvbHkoYWdlLCAzKTpmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzKQpkcm9wMShyOF9zdGVwMiwgdGVzdCA9ICJDaGlzcSIpCnI4X3N0ZXAzIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSArIHBvbHkoYWdlLCAyKSArIGNoYXJhY3Rlcjpwb2x5KGFnZSwgMikgKyBmYWN0b3I6cG9seShhZ2UsIDIpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMpCmRyb3AxKHI4X3N0ZXAzLCB0ZXN0ID0gIkNoaXNxIikKc3VtbWFyeShyOF9zdGVwMykKCiMgIyByb2JvdCBvbmx5CiMgcm9ib3RfcjQgPC0gbG1lcihzY29yZSB+IGZhY3RvciArICgxIHwgc3ViaWQpLCBzY29yZXNfY2hpbGRyZW5fYW5hbHlzaXMgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gInJvYm90IikpCiMgcm9ib3RfcjUgPC0gbG1lcihzY29yZSB+IGZhY3RvciArIHNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2NoaWxkcmVuX2FuYWx5c2lzICU+JSBmaWx0ZXIoY2hhcmFjdGVyID09ICJyb2JvdCIpKQojIHJvYm90X3I2IDwtIGxtZXIoc2NvcmUgfiBmYWN0b3IgKiBzY2FsZShhZ2UpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19jaGlsZHJlbl9hbmFseXNpcyAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSAicm9ib3QiKSkKIyBhbm92YShyb2JvdF9yNCwgcm9ib3RfcjUsIHJvYm90X3I2KQojICMgc3VtbWFyeShyb2JvdF9yNCkKIyAjIHN1bW1hcnkocm9ib3RfcjUpCiMgc3VtbWFyeShyb2JvdF9yNikKYGBgCgpgYGB7ciByZWdyZXNzaW9uIGFnZSBhdCB0ZXN0IHBsb3R9CnNjb3Jlc19jaGlsZHJlbl9wbG90dGluZyA8LSBkICU+JQogIHNlbGVjdChzdWJpZCwgYWdlLCBjaGFyYWN0ZXIpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZnVsbF9qb2luKHNjb3Jlc19jaGlsZHJlbikgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNjb3JlX0YxKSwgIWlzLm5hKHNjb3JlX0YyKSwgIWlzLm5hKHNjb3JlX0YzKSwgIWlzLm5hKGFnZSkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAic2NvcmUiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJhZ2UiLCAiY2hhcmFjdGVyIiwgImZhY3RvciIpLAogICAgICAgICAgICAgc3RhdGlzdGljc19mdW5jdGlvbnMgPSBjKCJtZWFuIiwgImNpX2xvd2VyIiwgImNpX3VwcGVyIikpCgojIHBsb3QKZ2dwbG90KHNjb3Jlc19jaGlsZHJlbl9wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSksCiAgICAgICBhZXMoeCA9IGFnZSwgeSA9IG1lYW4sIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxOSwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGNoaWxkcmVuJ3MgYWdlIiwKICAgICAgICMgc3VidGl0bGUgPSAiQ2hpbGRyZW4gKFN0dWR5IDIpXG4iLAogICAgICAgeCA9ICJBZ2UgKHllYXJzKSIsCiAgICAgICB5ID0gIkZhY3RvciBzY29yZSIpICMgMTAwMCBieSA1MDAKYGBgCgojIyBBZHVsdHMgYnkgYWdlIGF0IHRlc3QKCmBgYHtyIHJlZ3Jlc3Npb24gYWR1bHQgYWdlIGF0IHRlc3QgZGF0YSBwcmVwfQpzY29yZXNfYWR1bHRzIDwtIGZhKGQzX2FkdWx0LCBuZmFjdG9ycyA9IGVmYV9jb21iX21heF91bnJvdF9uZmFjdG9ycywgcm90YXRlID0gcm90X3R5cGUsCiAgICAgICAgICAgICAgICAgY29yID0gY29yX3R5cGUsIHNjb3JlcyA9IHNjb3JlX3R5cGUpJHNjb3JlcyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzdWJpZCIpICU+JQogIG11dGF0ZShhZ2VHcm91cCA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoInJ1biIsIHN1YmlkKSwgImFkdWx0IiwgImFkdWx0IikpKQoKY29sbmFtZXMoc2NvcmVzX2FkdWx0cylbMjo0XSA8LSBjKCJzY29yZV9GMSIsICJzY29yZV9GMiIsICJzY29yZV9GMyIpCmBgYAoKYGBge3IgcmVncmVzc2lvbiBhZHVsdCBhZ2UgYXQgdGVzdCBhbmFseXNpc30KIyBhbmFseXplCnNjb3Jlc19hZHVsdHNfYW5hbHlzaXMgPC0gZCAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZSwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGxlZnRfam9pbihzY29yZXNfYWR1bHRzKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpICYgIWlzLm5hKHNjb3JlX0YyKSAmICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2UpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgc3RhcnRzX3dpdGgoInNjb3JlXyIpKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvcikpCgojIHNldCBjb250cmFzdHMKY29udHJhc3RzKHNjb3Jlc19hZHVsdHNfYW5hbHlzaXMkZmFjdG9yKSA8LSBjYmluZChGMSA9IGMoMSwgLTEsIDApLCAjIE1BS0UgU1VSRSBUTyBET1VCTEUtQ0hFQ0shIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYzID0gYygwLCAtMSwgMSkpCmNvbnRyYXN0cyhzY29yZXNfYWR1bHRzX2FuYWx5c2lzJGNoYXJhY3RlcikgPC0gY2JpbmQocm9ib3QgPSBjKC0xLCAxKSkKCnI0IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKcjUgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciArIHNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKcjYgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIHNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKYW5vdmEocjQsIHI1LCByNikKIyBzdW1tYXJ5KHI0KQojIHN1bW1hcnkocjUpCnN1bW1hcnkocjYpCgojIHN0ZXB3aXNlIHJlZ3Jlc3Npb24KZHJvcDEocjYsIHRlc3QgPSAiQ2hpc3EiKQpyNl9zdGVwMiA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICsgc2NhbGUoYWdlKSArIGNoYXJhY3RlcjpzY2FsZShhZ2UpICsgZmFjdG9yOnNjYWxlKGFnZSkgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKZHJvcDEocjZfc3RlcDIsIHRlc3QgPSAiQ2hpc3EiKQpzdW1tYXJ5KHI2X3N0ZXAyKQoKIyBleHBsb3JlIHBvbHlub2lhbCBlZmZlY3RzIG9mIGFnZQpyNmIgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIHBvbHkoYWdlLCAxKSArICgxIHwgc3ViaWQpLCBzY29yZXNfYWR1bHRzX2FuYWx5c2lzKQpyNyA8LSBsbWVyKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogcG9seShhZ2UsIDIpICsgKDEgfCBzdWJpZCksIHNjb3Jlc19hZHVsdHNfYW5hbHlzaXMpCnI4IDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSwgc2NvcmVzX2FkdWx0c19hbmFseXNpcykKYW5vdmEocjZiLCByNywgcjgpCiMgc3VtbWFyeShyNmIpCnN1bW1hcnkocjcpCnN1bW1hcnkocjgpCgpyb3VuZChzaWduaWYoc3VtbWFyeShyNikkY29lZmZpY2llbnRzLCAzKSwgMikgJT4lIGRhdGEuZnJhbWUoKSAjICU+JSBWaWV3KCkKCiMgc3RlcHdpc2UgcmVncmVzc2lvbgpkcm9wMShyOCwgdGVzdCA9ICJDaGlzcSIpCnI4X3N0ZXAyIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKiBwb2x5KGFnZSwgMikgKyBwb2x5KGFnZSwgMykgKyBwb2x5KGFnZSwgMyk6Y2hhcmFjdGVyICsgcG9seShhZ2UsIDMpOmZhY3RvciArICgxIHwgc3ViaWQpLCBzY29yZXNfYWR1bHRzX2FuYWx5c2lzKQpkcm9wMShyOF9zdGVwMiwgdGVzdCA9ICJDaGlzcSIpCnI4X3N0ZXAzIDwtIGxtZXIoc2NvcmUgfiBjaGFyYWN0ZXIgKiBmYWN0b3IgKyBwb2x5KGFnZSwgMykgKyAoMSB8IHN1YmlkKSArIHBvbHkoYWdlLCAyKSArIGNoYXJhY3Rlcjpwb2x5KGFnZSwgMikgKyBmYWN0b3I6cG9seShhZ2UsIDIpLCBzY29yZXNfYWR1bHRzX2FuYWx5c2lzKQpkcm9wMShyOF9zdGVwMywgdGVzdCA9ICJDaGlzcSIpCnN1bW1hcnkocjhfc3RlcDMpCmBgYAoKYGBge3IgcmVncmVzc2lvbiBhZHVsdCBhZ2UgYXQgdGVzdCBwbG90fQpzY29yZXNfYWR1bHRzX3Bsb3R0aW5nIDwtIGQgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZSwgY2hhcmFjdGVyKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGZ1bGxfam9pbihzY29yZXNfYWR1bHRzKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpLCAhaXMubmEoc2NvcmVfRjIpLCAhaXMubmEoc2NvcmVfRjMpLCAhaXMubmEoYWdlKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIHN0YXJ0c193aXRoKCJzY29yZV8iKSkgJT4lCiAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IpKSAlPiUKICBtdWx0aV9ib290KGNvbHVtbiA9ICJzY29yZSIsCiAgICAgICAgICAgICBzdW1tYXJ5X2dyb3VwcyA9IGMoImFnZSIsICJjaGFyYWN0ZXIiLCAiZmFjdG9yIiksCiAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKCiMgcGxvdApnZ3Bsb3Qoc2NvcmVzX2FkdWx0c19wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaHlzaW9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSksCiAgICAgICBhZXMoeCA9IGFnZSwgeSA9IG1lYW4sIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxOSwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGFkdWx0cydzIGFnZSIsCiAgICAgICAjIHN1YnRpdGxlID0gIkFkdWx0cyAoU3R1ZHkgMilcbiIsCiAgICAgICB4ID0gIkFnZSAoeWVhcnMpIiwKICAgICAgIHkgPSAiRmFjdG9yIHNjb3JlIikgIyAxMDAwIGJ5IDUwMApgYGAKCiMjIEJpZyBmaWd1cmUKCmBgYHtyIGJpZyBmaWd1cmV9CiMgYnkgY29uZGl0aW9uCmQxX2J5Y29uZDIgPC0gZDIgJT4lCiAgbGVmdF9qb2luKGRfY2hpbGQwMiAlPiUgc2VsZWN0KHN1YmlkLCBhZ2UpKSAlPiUKICBzZWxlY3QoY2hhcmFjdGVyLCBjYXBhY2l0eSwgY2FwV29yZGluZywgcmVzcG9uc2VOdW0sIHN1YmlkLCBhZ2VHcm91cCwgYWdlKSAlPiUKICBmaWx0ZXIoY2FwYWNpdHkgIT0gIm5hIiwgaXMubmEocmVzcG9uc2VOdW0pID09IEYpICU+JQogIG11dGF0ZShjYXBXb3JkaW5nID0gZ3N1YigiIC0tLioiLCAiIiwgY2FwV29yZGluZyksCiAgICAgICAgIGFnZUdyb3VwMyA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLCAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIE5BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA4LCAiN3kiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDksICI4eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgMTAsICI5eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpKSkgJT4lCiAgZGlzdGluY3QoKQoKZDFfYnljb25kMiAlPiUgc2VsZWN0KGFnZUdyb3VwMywgc3ViaWQpICU+JSBkaXN0aW5jdCgpICU+JSBjb3VudChhZ2VHcm91cDMpCgojIG1ha2UgZGYgZm9yIHBsb3R0aW5nCmQxX2J5Y29uZDJfbWIgPC0gbXVsdGlfYm9vdChkMV9ieWNvbmQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAicmVzcG9uc2VOdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5X2dyb3VwcyA9IGMoImFnZUdyb3VwMyIsICJjaGFyYWN0ZXIiLCAiY2FwYWNpdHkiLCAiY2FwV29yZGluZyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKCmQxX2J5Y29uZDJfbWJfZmFjdG9yc0FsbCA8LSBkMV9ieWNvbmQyX21iICU+JSAKICBmdWxsX2pvaW4oZWZhX2NvbWJfc21hbGxfcm90X2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIGdyb3VwX2J5KGZhY3RvcikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKG9yZGVyID0gcmFuayhkZXNjKGxvYWRpbmdfYWJzKSkpKSAlPiUKICBhcnJhbmdlKGNoYXJhY3RlciwgZmFjdG9yLCBkZXNjKGxvYWRpbmdfYWJzKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJmdWxsX29yZGVyIikgJT4lCiAgbXV0YXRlKGZ1bGxfb3JkZXIgPSBhcy5udW1lcmljKGZ1bGxfb3JkZXIpKSAlPiUKICBhcnJhbmdlKGZhY3Rvck5hbWUsIGZ1bGxfb3JkZXIpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZUdyb3VwMykpICU+JQogIG11dGF0ZShmYWN0b3JOYW1lID0gZmFjdG9yKGZhY3Rvck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiRmFjdG9yIDEiLCAiRmFjdG9yIDIiLCAiRmFjdG9yIDMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGh5c2lvbG9naWNhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlcmNlcHR1YWwtY29nbml0aXZlIikpKQoKZG9kZ2Vfd2lkdGggPC0gMgoKZ2dwbG90KGQxX2J5Y29uZDJfbWJfZmFjdG9yc0FsbCwgCiAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIHkgPSBtZWFuLAogICAgICAgICAgIGNvbG9yID0gYWdlR3JvdXAzLCBzaGFwZSA9IGFnZUdyb3VwMywKICAgICAgICAgICBsYWJlbCA9IGNhcFdvcmRpbmcpKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gY2hhcmFjdGVyLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbHR5ID0gMykgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMykgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEsIGx0eSA9IDMpICsKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkdGgpLCBzaXplID0gOCkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKHJlcCgxOCwgMyksIDE3KSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcih0eXBlID0gInNlcSIsIHBhbGV0dGUgPSAiUHVSZCIpICsKICBzY2FsZV9jb2xvdXJfaHVlKGggPSBjKDAsIDE4MCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gZG9kZ2Vfd2lkdGgpLCB3aWR0aCA9IDApICsKICBnZW9tX3RleHQoYWVzKHkgPSAtMC41LCBoanVzdCA9IDApLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAjIGNvbG9yID0gZDFfYnljb25kMl9tYl9mYWN0b3JzQWxsJHRleHRDb2xvciwKICAgICAgICAgICAgc2l6ZSA9IDgpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UgKDAgPSBOTywgMC41ID0gS0lOREEsIDEgPSBZRVMpIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgY29sb3IgPSAiQWdlIGdyb3VwOiAiLCBzaGFwZSA9ICJBZ2UgZ3JvdXA6ICIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLCAwLjUsIDEpKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgIyBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSAjIDE3MDAgYnkgMjAwMAoKYGBgCgpgYGB7ciB0YWJsZXMgYW5kIGNoaXNxIHRlc3RzIGZvciBpdGVtc30KIyBGSUxURVJFRCBCWSBST0JPVAoKIyBmZWVsIHNhZmUKd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImZlZWxfc2FmZSIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSwKICAgICB0YWJsZShhZ2VHcm91cCwgcmVzcG9uc2VDYXQpKSAjJT4lCiAgI3N1bW1hcnkoKQoKIyBmZWVsIHRpcmVkCndpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX3RpcmVkIiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpLAogICAgIHRhYmxlKGFnZUdyb3VwLCByZXNwb25zZUNhdCkpICMlPiUKICAjc3VtbWFyeSgpCgojIGZlZWwgc2NhcmVkCndpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX3NjYXJlZCIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSwKICAgICB0YWJsZShhZ2VHcm91cCwgcmVzcG9uc2VDYXQpKSAjJT4lCiAgI3N1bW1hcnkoKQoKIyBnZXQgaHVuZ3J5CndpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJnZXRfaHVuZ3J5IiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpLAogICAgIHRhYmxlKGFnZUdyb3VwLCByZXNwb25zZUNhdCkpICMlPiUKICAjc3VtbWFyeSgpCgojIGZlZWwgcGFpbgp3aXRoKGQyICU+JSBmaWx0ZXIoY2FwV29yZGluZyA9PSAiZmVlbF9wYWluIiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpLAogICAgIHRhYmxlKGFnZUdyb3VwLCByZXNwb25zZUNhdCkpICMlPiUKICAjc3VtbWFyeSgpCgojIGZlZWwgcHJvdWQKcHJvdWRfdGFibGUgPC0gd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImZlZWxfcHJvdWQiLCAKICAgICAgICAgICAgICAgICAgICFpcy5uYShyZXNwb25zZUNhdCksCiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lCiAgICAgICBtdXRhdGUoYWdlR3JvdXAzID0gaWZlbHNlKGFnZUdyb3VwID09ICJhZHVsdCIsICJhZHVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShhZ2UpLCBOQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA4LCAiNyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDksICI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiKSkpKSksCiAgICAgdGFibGUoYWdlR3JvdXAzLCByZXNwb25zZUNhdCkpICU+JQogIHByb3AudGFibGUoMSkgCnByb3VkX3RhYmxlCnByb3VkX3RhYmxlWzMsMl0rcHJvdWRfdGFibGVbMywzXQoKIyBmZWVsIGhhcHB5CmhhcHB5X3RhYmxlIDwtIHdpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX2hhcHB5IiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JQogICAgICAgbXV0YXRlKGFnZUdyb3VwMyA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLCAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoaXMubmEoYWdlKSwgTkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOCwgIjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA5LCAiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IikpKSkpLAogICAgIHRhYmxlKGFnZUdyb3VwMywgcmVzcG9uc2VDYXQpKSAlPiUKICBwcm9wLnRhYmxlKDEpIApoYXBweV90YWJsZQpoYXBweV90YWJsZVszLDJdK2hhcHB5X3RhYmxlWzMsM10KCiMgZmVlbCBndWlsdHkKZ3VpbHR5X3RhYmxlIDwtIHdpdGgoZDIgJT4lIGZpbHRlcihjYXBXb3JkaW5nID09ICJmZWVsX2d1aWx0eSIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSAlPiUKICAgICAgIG11dGF0ZShhZ2VHcm91cDMgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwgImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIE5BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDgsICI3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOSwgIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIpKSkpKSwKICAgICB0YWJsZShhZ2VHcm91cDMsIHJlc3BvbnNlQ2F0KSkgJT4lCiAgcHJvcC50YWJsZSgxKSAKZ3VpbHR5X3RhYmxlCmd1aWx0eV90YWJsZVsxLDJdK2d1aWx0eV90YWJsZVsxLDNdCmd1aWx0eV90YWJsZVsyLDJdK2d1aWx0eV90YWJsZVsyLDNdCmd1aWx0eV90YWJsZVszLDJdK2d1aWx0eV90YWJsZVszLDNdCgpjbG1fZ3VpbHR5IDwtIG9yZGluYWw6OmNsbShyZXNwb25zZUNhdCB+IGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGQyICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoY2FwV29yZGluZyA9PSAiZmVlbF9ndWlsdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gInJvYm90IikpCnN1bW1hcnkoY2xtX2d1aWx0eSkKCiMgcGVyc29uYWxpdHkKcGVyc29uYWxpdHlfdGFibGUgPC0gd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImhhdmVfYV9wZXJzb25hbGl0eSIsIAogICAgICAgICAgICAgICAgICAgIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSAlPiUKICAgICAgIG11dGF0ZShhZ2VHcm91cDMgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwgImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGlzLm5hKGFnZSksIE5BLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDgsICI3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOSwgIjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOSIpKSkpKSwKICAgICB0YWJsZShhZ2VHcm91cDMsIHJlc3BvbnNlQ2F0KSkgJT4lCiAgcHJvcC50YWJsZSgxKSAKcGVyc29uYWxpdHlfdGFibGUKcGVyc29uYWxpdHlfdGFibGVbMywyXStwZXJzb25hbGl0eV90YWJsZVszLDNdCgojIHNlbGYtY29udHJvbApzZWxmX2NvbnRyb2xfdGFibGUgPC0gd2l0aChkMiAlPiUgZmlsdGVyKGNhcFdvcmRpbmcgPT0gImhhdmVfc2VsZi1jb250cm9sIiwgCiAgICAgICAgICAgICAgICAgICAhaXMubmEocmVzcG9uc2VDYXQpLAogICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JQogICAgICAgbXV0YXRlKGFnZUdyb3VwMyA9IGlmZWxzZShhZ2VHcm91cCA9PSAiYWR1bHQiLCAiYWR1bHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoaXMubmEoYWdlKSwgTkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOCwgIjciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA5LCAiOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI5IikpKSkpLAogICAgIHRhYmxlKGFnZUdyb3VwMywgcmVzcG9uc2VDYXQpKSAlPiUKICBwcm9wLnRhYmxlKDEpIApzZWxmX2NvbnRyb2xfdGFibGUKc2VsZl9jb250cm9sX3RhYmxlWzEsMl0rc2VsZl9jb250cm9sX3RhYmxlWzEsM10Kc2VsZl9jb250cm9sX3RhYmxlWzIsMl0rc2VsZl9jb250cm9sX3RhYmxlWzIsM10Kc2VsZl9jb250cm9sX3RhYmxlWzMsMl0rc2VsZl9jb250cm9sX3RhYmxlWzMsM10KCmNsbV9zZWxmX2NvbnRyb2wgPC0gb3JkaW5hbDo6Y2xtKHJlc3BvbnNlQ2F0IH4gYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZDIgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjYXBXb3JkaW5nID09ICJoYXZlX3NlbGYtY29udHJvbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpcy5uYShyZXNwb25zZUNhdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA9PSAicm9ib3QiKSkKc3VtbWFyeShjbG1fc2VsZl9jb250cm9sKQoKIyBNT1JFIEdFTkVSQUwKCmF0X2xlYXN0X2tpbmRhXzl5IDwtIGQyICU+JSAKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgYWdlR3JvdXAgPT0gImNoaWxkIiwKICAgICAgICAgIWlzLm5hKGFnZSksCiAgICAgICAgIGFnZSA+IDkpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY2hhcmFjdGVyLCBjYXBhY2l0eSwgcmVzcG9uc2VDYXQpICU+JQogIGdyb3VwX2J5KGNoYXJhY3RlciwgY2FwYWNpdHkpICU+JQogIG11dGF0ZShwcm9wX24gPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChyZXNwb25zZUNhdCwgcHJvcF9uKSAlPiUgIyBuKSAlPiUKICBtdXRhdGUoYXRfbGVhc3Rfa2luZGEgPSBzdW0oa2luZGEsIHllcykpICU+JQogIGxlZnRfam9pbihlZmFfY29tYl9zbWFsbF9yb3RfbG9hZGluZ3MpICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGF0X2xlYXN0X2tpbmRhKSkKCmF0X2xlYXN0X2tpbmRhXzl5ICU+JQogIHNlbGVjdChjaGFyYWN0ZXI6YXRfbGVhc3Rfa2luZGEsIGZhY3RvciwgbG9hZGluZykKCmF0X2xlYXN0X2tpbmRhX2FkdWx0IDwtIGQyICU+JSAKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlQ2F0KSwKICAgICAgICAgY2hhcmFjdGVyID09ICJyb2JvdCIsCiAgICAgICAgIGFnZUdyb3VwID09ICJhZHVsdCIpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgY291bnQoY2FwYWNpdHksIHJlc3BvbnNlQ2F0KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgbXV0YXRlKHByb3BfbiA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHJlc3BvbnNlQ2F0LCBwcm9wX24pICU+JSAjIG4pICU+JQogIG11dGF0ZShhdF9sZWFzdF9raW5kYSA9IHN1bShraW5kYSwgeWVzKSkgJT4lCiAgbGVmdF9qb2luKGVmYV9jb21iX3NtYWxsX3JvdF9sb2FkaW5ncykgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MoYXRfbGVhc3Rfa2luZGEpKQoKYXRfbGVhc3Rfa2luZGFfYWR1bHQgJT4lCiAgc2VsZWN0KGNhcGFjaXR5OmF0X2xlYXN0X2tpbmRhLCBmYWN0b3IsIGxvYWRpbmcpCgpgYGAKCiMjIEJJRyBUQUJMRQoKYGBge3IgYmlnIHRhYmxlfQojIG1ha2UgZGF0YWZyYW1lCmJpZ190YWJsZSA8LSBlZmFfYWR1bHRfc21hbGxfcm90X2xvYWRpbmdzICU+JSAKICBzZXROYW1lcyhwYXN0ZTAoJ2FkdWx0XycsIG5hbWVzKC4pKSkgJT4lIAogIHJlbmFtZShjYXBhY2l0eSA9IGFkdWx0X2NhcGFjaXR5LCAKICAgICAgICAgY2FwV29yZGluZyA9IGFkdWx0X2NhcFdvcmRpbmcpICU+JQogIGZ1bGxfam9pbihlZmFfY2hpbGRfc21hbGxfcm90X2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIHNldE5hbWVzKHBhc3RlMCgnY2hpbGRfJywgbmFtZXMoLikpKSAlPiUKICAgICAgICAgICAgICByZW5hbWUoY2FwYWNpdHkgPSBjaGlsZF9jYXBhY2l0eSwKICAgICAgICAgICAgICAgICAgICAgY2FwV29yZGluZyA9IGNoaWxkX2NhcFdvcmRpbmcpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2NvbWJfc21hbGxfcm90X2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIHNldE5hbWVzKHBhc3RlMCgnY29tYl8nLCBuYW1lcyguKSkpICU+JQogICAgICAgICAgICAgIHJlbmFtZShjYXBhY2l0eSA9IGNvbWJfY2FwYWNpdHksIAogICAgICAgICAgICAgICAgICAgICBjYXBXb3JkaW5nID0gY29tYl9jYXBXb3JkaW5nKSkgJT4lCiAgYXJyYW5nZShjb21iX2ZhY3RvciwgZGVzYyhjb21iX2xvYWRpbmdfYWJzKSkgJT4lCiAgbXV0YXRlKGNhcFdvcmRpbmcgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkgJT4lCiAgc2VsZWN0KGNhcFdvcmRpbmcsIAogICAgICAgICBhZHVsdF9GMiwgY2hpbGRfRjEsIGNvbWJfRjEsICMgZG91YmxlLWNoZWNrIGFkdWx0cyEKICAgICAgICAgYWR1bHRfRjEsIGNoaWxkX0YyLCBjb21iX0YyLCAjIGRvdWJsZS1jaGVjayBhZHVsdHMhCiAgICAgICAgIGFkdWx0X0YzLCBjaGlsZF9GMywgY29tYl9GMykgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJjYXBXb3JkaW5nIikgJT4lCiAgc2lnbmlmKDMpICU+JQogIHJvdW5kKDIpCgpiaWdfdGFibGUKYGBgCgpgYGB7ciByZWxhdGlvbnNoaXBzIGJldHdlZW4gc2NvcmVzfQpjb3IucGxvdChzY29yZXNfYWxsICU+JSBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gInN1YmlkIikgJT4lIHNlbGVjdCgtYWdlR3JvdXApKQpjb3IudGVzdChzY29yZXNfYWxsJHNjb3JlX0YxLCBzY29yZXNfYWxsJHNjb3JlX0YyLCB1c2UgPSAiY29tcGxldGUub2JzIikKY29yLnRlc3Qoc2NvcmVzX2FsbCRzY29yZV9GMSwgc2NvcmVzX2FsbCRzY29yZV9GMywgdXNlID0gImNvbXBsZXRlLm9icyIpCmNvci50ZXN0KHNjb3Jlc19hbGwkc2NvcmVfRjIsIHNjb3Jlc19hbGwkc2NvcmVfRjMsIHVzZSA9ICJjb21wbGV0ZS5vYnMiKQoKCmNvci5jaShzY29yZXNfYWR1bHRzICU+JSBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gInN1YmlkIikgJT4lIHNlbGVjdCgtYWdlR3JvdXApKQpjb3IuY2koc2NvcmVzX2NoaWxkcmVuICU+JSBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gInN1YmlkIikgJT4lIHNlbGVjdCgtYWdlR3JvdXApKQpjb3IuY2koc2NvcmVzX2FsbCAlPiUgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJzdWJpZCIpICU+JSBzZWxlY3QoLWFnZUdyb3VwKSkKYGBgCgpgYGB7ciBuZXcgcGxvdH0KIyBieSBjb25kaXRpb24KZDFfYnljb25kMyA8LSBkMiAlPiUKICBsZWZ0X2pvaW4oZF9jaGlsZDAyICU+JSBzZWxlY3Qoc3ViaWQsIGFnZSkpICU+JQogIHNlbGVjdChjaGFyYWN0ZXIsIGNhcGFjaXR5LCBjYXBXb3JkaW5nLCByZXNwb25zZUNhdCwgc3ViaWQsIGFnZUdyb3VwLCBhZ2UpICU+JQogIGZpbHRlcihjYXBhY2l0eSAhPSAibmEiLCAhaXMubmEocmVzcG9uc2VDYXQpKSAlPiUKICBtdXRhdGUoY2FwV29yZGluZyA9IGdzdWIoIiAtLS4qIiwgIiIsIGNhcFdvcmRpbmcpLAogICAgICAgICBhZ2VHcm91cDMgPSBpZmVsc2UoYWdlR3JvdXAgPT0gImFkdWx0IiwgImFkdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShpcy5uYShhZ2UpLCBOQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoYWdlIDwgOCwgIjd5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShhZ2UgPCA5LCAiOHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDEwLCAiOXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSkpICU+JQogIGRpc3RpbmN0KCkKCmQxX2J5Y29uZDMgJT4lIHNlbGVjdChhZ2VHcm91cDMsIHN1YmlkKSAlPiUgZGlzdGluY3QoKSAlPiUgY291bnQoYWdlR3JvdXAzKQoKIyBtYWtlIGRmIGZvciBwbG90dGluZwpkMV9ieWNvbmQzX21iX2ZhY3RvcnNBbGwgPC0gZDFfYnljb25kMyAlPiUgCiAgZnVsbF9qb2luKGVmYV9jb21iX3NtYWxsX3JvdF9sb2FkaW5ncyAlPiUKICAgICAgICAgICAgICBncm91cF9ieShmYWN0b3IpICU+JQogICAgICAgICAgICAgIG11dGF0ZShvcmRlciA9IHJhbmsoZGVzYyhsb2FkaW5nX2FicykpKSkgJT4lCiAgYXJyYW5nZShjaGFyYWN0ZXIsIGZhY3RvciwgZGVzYyhsb2FkaW5nX2FicykpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiZnVsbF9vcmRlciIpICU+JQogIG11dGF0ZShmdWxsX29yZGVyID0gYXMubnVtZXJpYyhmdWxsX29yZGVyKSkgJT4lCiAgYXJyYW5nZShmYWN0b3JOYW1lLCBmdWxsX29yZGVyKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2VHcm91cDMpKSAlPiUKICBtdXRhdGUoZmFjdG9yTmFtZSA9IGZhY3RvcihmYWN0b3JOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkZhY3RvciAxIiwgIkZhY3RvciAyIiwgIkZhY3RvciAzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU29jaWFsLWVtb3Rpb25hbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBoeXNpb2xvZ2ljYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSwKICAgICAgICAgYWdlbnRpYyA9IGlmZWxzZShjYXBXb3JkaW5nICVpbiUgYygiZGVjaWRlX3doYXRfdG9fZG8iLCAibWFrZV9jaG9pY2VzIiwgImhhdmVfc2VsZl9jb250cm9sIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ha2VfcGxhbnMiLCAiaGF2ZV9nb2FscyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmRlcnN0YW5kX2hvd19zb21lYm9keV9lbHNlX2lzX2ZlZWxpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrbm93X3doYXQnc19uaWNlX2FuZF93aGF0J3NfbWVhbiIsICJoYXZlX3Rob3VnaHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtZW1iZXJfdGhpbmdzIiwgImNvbW11bmljYXRlX3dpdGhfc29tZWJvZHlfZWxzZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIEZBTFNFKSkKCgpkMV9ieWNvbmQzX2Fubm90YXRlIDwtIGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgZmlsdGVyKG9yZGVyIDw9IDQpICU+JSAKICBzZWxlY3QoY2hhcmFjdGVyLCBvcmRlciwgY2FwV29yZGluZykgJT4lIAogIGRpc3RpbmN0KCkKCiMgZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgZmlsdGVyKG9yZGVyIDw9IDQpLCAKIyAgICAgICAgYWVzKHggPSBpbnRlcmFjdGlvbihhZ2VHcm91cDMsIGRlc2Mob3JkZXIqMikpLCAKIyAgICAgICAgICAgICMgeSA9IHJlc3BvbnNlQ2F0LAojICAgICAgICAgICAgIyBjb2xvciA9IGFnZUdyb3VwMywgc2hhcGUgPSBhZ2VHcm91cDMsCiMgICAgICAgICAgICBmaWxsID0gcmVzcG9uc2VDYXQsCiMgICAgICAgICAgICBsYWJlbCA9IGFnZUdyb3VwMykpICsKIyAgICAgICAgICAgICMgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBwYXN0ZShjYXBXb3JkaW5nLCBhZ2VHcm91cDMsIHNlcCA9ICI6ICIpKSkpICsKIyAgICMgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gY2hhcmFjdGVyICogb3JkZXIsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKIyAgIGZhY2V0X2dyaWQoZmFjdG9yTmFtZSB+IGNoYXJhY3Rlciwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwojICAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsKIyAgIGdlb21fdGV4dChhZXMoeSA9IC0wLjUsIGhqdXN0ID0gMCksIAojICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwKIyAgICAgICAgICAgICAjIGNvbG9yID0gZDFfYnljb25kMl9tYl9mYWN0b3JzQWxsJHRleHRDb2xvciwKIyAgICAgICAgICAgICBzaXplID0gOCkgKwojICAgZ2VvbV90ZXh0KGFlcyh4ID0gb3JkZXIsIHkgPSAxLjUsIGxhYmVsID0gY2FwV29yZGluZyksIGhqdXN0ID0gLTEpICsKIyAgICMgYW5ub3RhdGUoInRleHQiLCBhZXMoZmFjZXQgPSBvcmRlciwgbGFiZWwgPSBkMV9ieWNvbmQzX2Fubm90YXRlJGNhcFdvcmRpbmcpKSArCiMgICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiMgICAgICAgIHkgPSAiUmVsYXRpdmUgZnJlcXVlbmN5IiwKIyAgICAgICAgeCA9ICJDYXBhY2l0eSAqIEFnZSBncm91cCIsCiMgICAgICAgIGZpbGwgPSAiUmVzcG9uc2U6ICIpICsKIyAgIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBjKDAsIDAuNSwgMSkpICsKIyAgICMgY29vcmRfZmxpcCgpICsKIyAgIHRoZW1lX2J3KCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAojICAgICAgICAgIyBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSAjIDE3MDAgYnkgMjAwMAoKZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihvcmRlciA8PSA1KSAlPiUKICAgICAgICAgbXV0YXRlKGZhY2V0ID0gdG9vbHM6OnRvVGl0bGVDYXNlKHBhc3RlMChjaGFyYWN0ZXIsICIgKCIsIGFnZUdyb3VwLCAiKSIpKSksIAogICAgICAgICAjIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpLCAKICAgICAgIGFlcyh4ID0gZGVzYyhvcmRlcioyKSwgCiAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwKICAgICAgICAgICBhbHBoYSA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgICMgZmlsbCA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgIGxhYmVsID0gZ3N1YigiXyIsICIgIiwgY2FwV29yZGluZykpKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gZmFjZXQpICsgIywgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gInN0YWNrIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcz1jKDAuNCwgMC43LCAxKSkgKwogIGdlb21fdGV4dChhZXMoeSA9IDUsIGhqdXN0ID0gMCksIAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICMgY29sb3IgPSBkMV9ieWNvbmQyX21iX2ZhY3RvcnNBbGwkdGV4dENvbG9yLAogICAgICAgICAgICBzaXplID0gOCkgKwogIGxhYnModGl0bGUgPSAiUmVzcG9uc2VzIGJ5IG1lbnRhbCBjYXBhY2l0eSBpdGVtIiwKICAgICAgIHkgPSAiQ291bnQiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICBhbHBoYSA9ICJSZXNwb25zZTogIiwKICAgICAgIGZpbGwgPSAiQ2hhcmFjdGVyOiAiKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgIyBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSAjIDIwMDAgYnkgMTIwMAoKZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUKICAgICAgICAgIyBmaWx0ZXIob3JkZXIgPD0gMTApICU+JQogICAgICAgICAjIGZpbHRlcihvcmRlciA8PSA1IHwgY2FwV29yZGluZyAlaW4lIGMoImtub3dfd2hhdCdzX25pY2VfYW5kX3doYXQnc19tZWFuIiwKICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWtlX2Nob2ljZXMiKSkgJT4lICMgYWRkIHNlbGVjdGVkIGFnZW5jeSBieSBmYWN0b3IKICAgICAgICAgbXV0YXRlKGZhY2V0ID0gdG9vbHM6OnRvVGl0bGVDYXNlKHBhc3RlMChjaGFyYWN0ZXIsICIgKCIsIGFnZUdyb3VwLCAiKSIpKSksIAogICAgICAgICAjIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpLCAKICAgICAgIGFlcyh4ID0gZGVzYyhvcmRlcioyKSwgCiAgICAgICAgICAgZmlsbCA9IGNoYXJhY3RlciwKICAgICAgICAgICBhbHBoYSA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgICMgZmlsbCA9IHJlc3BvbnNlQ2F0LAogICAgICAgICAgIGxhYmVsID0gZ3N1YigiXyIsICIgIiwgY2FwV29yZGluZykpKSArCiAgZmFjZXRfZ3JpZChmYWN0b3JOYW1lIH4gZmFjZXQsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJzdGFjayIsIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXM9YygwLjQsIDAuNywgMSkpICsKICBnZW9tX3RleHQoYWVzKHkgPSA1LCBoanVzdCA9IDApLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLAogICAgICAgICAgICAjIGNvbG9yID0gZDFfYnljb25kMl9tYl9mYWN0b3JzQWxsJHRleHRDb2xvciwKICAgICAgICAgICAgc2l6ZSA9IDgpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiAgICAgICB5ID0gIkNvdW50IiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgYWxwaGEgPSAiUmVzcG9uc2U6ICIsCiAgICAgICBmaWxsID0gIkNoYXJhY3RlcjogIikgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMzIpLAogICAgICAgICMgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAidG9wIikgIyAyMDAwIGJ5IDEyMDAKCmBgYAoKYGBge3Igc3JjZCBwbG90IHZlcnNpb24gMX0KZF9zcmNkIDwtIGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkYxIiwgb3JkZXIgPD0gNSkgJT4lCiAgc2VsZWN0KGFnZUdyb3VwLCBjaGFyYWN0ZXIsIHJlc3BvbnNlQ2F0LCBvcmRlciwgY2FwV29yZGluZykgJT4lCiAgbXV0YXRlKGxhYmVsbGVyID0gaWZlbHNlKHJlc3BvbnNlQ2F0ID09ICJubyIsIGdzdWIoIl8iLCAiICIsIGNhcFdvcmRpbmcpLCBOQSkpICU+JQogIGRpc3RpbmN0KCkKICAKZ2dwbG90KGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkYxIiwgb3JkZXIgPD0gNSkgJT4lCiAgICAgICAgIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpLAogICAgICAgYWVzKHggPSBkZXNjKG9yZGVyKjIpLCAKICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLAogICAgICAgICAgIGFscGhhID0gcmVzcG9uc2VDYXQsCiAgICAgICAgICAgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkpICsKICBmYWNldF9ncmlkKGZhY3Rvck5hbWUgfiBmYWNldCkgKyAjLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAic3RhY2siLCBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzPWMoMC4yLCAwLjUsIDEpKSArCiAgIyBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzPWMoMC40LCAwLjcsIDEpKSArCiAgZ2VvbV90ZXh0KGRhdGEgPSBkX3NyY2QsIAogICAgICAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIGxhYmVsID0gbGFiZWxsZXIsIHkgPSA1KSwKICAgICAgICAgICAgaGp1c3QgPSAwLCBhbmdsZSA9IDkwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA4LCBhbHBoYSA9IDEpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyBieSBtZW50YWwgY2FwYWNpdHkgaXRlbSIsCiAgICAgICB5ID0gIkNvdW50IiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgYWxwaGEgPSAiUmVzcG9uc2U6ICIsCiAgICAgICBmaWxsID0gIkNoYXJhY3RlcjogIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpY2tzLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICMgMTAwMCBieSA1MDAKYGBgCgpgYGB7ciBzcmNkIHBsb3QgdmVyc2lvbiAyfQpkX3NyY2QyIDwtIGQxX2J5Y29uZDNfbWJfZmFjdG9yc0FsbCAlPiUgCiAgICAgICAgIGZpbHRlcihmYWN0b3IgPT0gIkYxIiwgb3JkZXIgPD0gNSwgY2hhcmFjdGVyID09ICJyb2JvdCIpICU+JQogIHNlbGVjdChhZ2VHcm91cCwgY2hhcmFjdGVyLCByZXNwb25zZUNhdCwgb3JkZXIsIGNhcFdvcmRpbmcpICU+JQogIG11dGF0ZShsYWJlbGxlciA9IGlmZWxzZShyZXNwb25zZUNhdCA9PSAibm8iLCBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSwgTkEpKSAlPiUKICBkaXN0aW5jdCgpCiAgCmdncGxvdChkMV9ieWNvbmQzX21iX2ZhY3RvcnNBbGwgJT4lIAogICAgICAgICBmaWx0ZXIoZmFjdG9yID09ICJGMSIsIG9yZGVyIDw9IDUpICU+JQogICAgICAgICBtdXRhdGUoZmFjZXQgPSB0b2xvd2VyKHBhc3RlKGFnZUdyb3VwLCBjaGFyYWN0ZXIsIHNlcCA9ICI6ICIpKSkgJT4lCiAgICAgICAgIG11dGF0ZShmYWNldCA9IGZhY3RvcihmYWNldCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjaGlsZDogYmVldGxlIiwgImNoaWxkOiByb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWR1bHQ6IGJlZXRsZSIsICJhZHVsdDogcm9ib3QiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNoaWxkcmVuOiBiZWV0bGUiLCAiY2hpbGRyZW46IHJvYm90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZHVsdHM6IGJlZXRsZSIsICJhZHVsdHM6IHJvYm90IikpKSAlPiUKICAgICAgICAgbXV0YXRlKGFnZUdyb3VwMiA9IGZhY3RvcihhZ2VHcm91cCwgbGV2ZWxzID0gYygiY2hpbGQiLCAiYWR1bHQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjaGlsZHJlbiIsICJhZHVsdHMiKSkpLAogICAgICAgYWVzKHggPSBkZXNjKG9yZGVyKjIpLCAKICAgICAgICAgICBmaWxsID0gY2hhcmFjdGVyLAogICAgICAgICAgIGFscGhhID0gcmVzcG9uc2VDYXQsCiAgICAgICAgICAgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkpICsKICBmYWNldF9ncmlkKH4gZmFjZXQpICsgIywgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gInN0YWNrIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcz1jKDAuMiwgMC41LCAxKSkgKwogICMgc2NhbGVfYWxwaGFfbWFudWFsKHZhbHVlcz1jKDAuNCwgMC43LCAxKSkgKwogIGdlb21fdGV4dChkYXRhID0gZF9zcmNkMiwgCiAgICAgICAgICAgIGFlcyh4ID0gZGVzYyhvcmRlcioyKSwgbGFiZWwgPSBsYWJlbGxlciwgeSA9IDUpLAogICAgICAgICAgICBoanVzdCA9IDAsIGFuZ2xlID0gOTAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDgsIGFscGhhID0gMSkgKwogIGxhYnMoeSA9ICJDb3VudCIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwKICAgICAgIGFscGhhID0gIlJlc3BvbnNlOiAiLAogICAgICAgZmlsbCA9ICJDaGFyYWN0ZXI6ICIpICsKICBsYWJzKHRpdGxlID0gIlJlc3BvbnNlcyAocmF3IGNvdW50cykiLAogICAgICAgeSA9ICJDb3VudCIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwKICAgICAgIGFscGhhID0gInJlc3BvbnNlOiAiLAogICAgICAgZmlsbCA9ICJjaGFyYWN0ZXI6ICIpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSAjIDEwMDAgYnkgNTAwCgpnZ3Bsb3QoZDFfYnljb25kM19tYl9mYWN0b3JzQWxsICU+JSAKICAgICAgICAgZmlsdGVyKGZhY3RvciA9PSAiRjEiLCBvcmRlciA8PSA1LCBjaGFyYWN0ZXIgPT0gInJvYm90IikgJT4lCiAgICAgICAgIG11dGF0ZShmYWNldCA9IHRvb2xzOjp0b1RpdGxlQ2FzZShwYXN0ZShhZ2VHcm91cCwgY2hhcmFjdGVyLCBzZXAgPSAiOiAiKSkpICU+JQogICAgICAgICBtdXRhdGUoZmFjZXQgPSBmYWN0b3IoZmFjZXQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiQ2hpbGQ6IFJvYm90IiwgIkFkdWx0OiBSb2JvdCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiQ2hpbGRyZW46IHJvYm90IiwgIkFkdWx0czogcm9ib3QiKSkpICU+JQogICAgICAgICBtdXRhdGUoYWdlR3JvdXAyID0gZmFjdG9yKGFnZUdyb3VwLCBsZXZlbHMgPSBjKCJjaGlsZCIsICJhZHVsdCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoImNoaWxkcmVuIiwgImFkdWx0cyIpKSksCiAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIAogICAgICAgICAgIGFscGhhID0gcmVzcG9uc2VDYXQsCiAgICAgICAgICAgbGFiZWwgPSBnc3ViKCJfIiwgIiAiLCBjYXBXb3JkaW5nKSkpICsKICBmYWNldF9ncmlkKH4gYWdlR3JvdXAyKSArICMsIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJzdGFjayIsIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9ICIjMDBCRkM0IikgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXM9YygwLjIsIDAuNSwgMSkpICsKICAjIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXM9YygwLjQsIDAuNywgMSkpICsKICBnZW9tX3RleHQoZGF0YSA9IGRfc3JjZDIsIAogICAgICAgICAgICBhZXMoeCA9IGRlc2Mob3JkZXIqMiksIGxhYmVsID0gbGFiZWxsZXIsIHkgPSA1KSwKICAgICAgICAgICAgaGp1c3QgPSAwLCBhbmdsZSA9IDkwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSA4LCBhbHBoYSA9IDEpICsKICBsYWJzKHkgPSAiQ291bnQiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICBhbHBoYSA9ICJSZXNwb25zZTogIiwKICAgICAgIGZpbGwgPSAiQ2hhcmFjdGVyOiAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgIyA2MDAgYnkgNTAwCmBgYA==